PhoneGap外掛開發 js與Java之間的互動例子 詳解
阿新 • • 發佈:2019-01-23
PhoneGap中js與Java之間相互呼叫有兩種方式,分別是同步和非同步。
1、同步方式:js呼叫Java類的方法,然後Java類的方法直接返回一個值給js端,這跟我們Java方法間的呼叫是差不多一個意思;
2、非同步方式:js呼叫Java類的方法,但是Java類的方法可能要處理一系列的事情,比如請求資料,那麼等Java類的方法執行完,通過回撥把結果返回給js端,這就是非同步方式,說白了其實就像是Android同步與非同步的Http請求...
那麼,js是如何來實現呼叫Java方法呢?其實就是採用PhoneGap外掛方式,下面就以Android為例,來談一談js與java之間的互動~
PhoneGap底層框架的實現,請參考另一篇文章,你絕對會有收穫的!! PhoneGap 底層框架實現原理詳解
首先匯入phonegap-2.9.1\lib\android\framework這個Library,以及phonegap-2.9.1\lib\android\test這個測試工程~結構如圖所示
第一步,建立一個自定義外掛類MyPlugin,繼承CordovaPlugin,然後重寫其execute方法,因為js預設就是呼叫MyPlugin的execute方法~~
package org.apache.cordova; import org.apache.cordova.api.CallbackContext; import org.apache.cordova.api.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; import android.util.Log; public class MyPlugin extends CordovaPlugin { private String helloAction = "helloAction"; @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { Log.i("test", action); if (action.equals(helloAction)) { callbackContext.success("congratulation,success"); return true; } else { callbackContext.error("sorry,error"); return false; } } }
第二步,開啟我們專案的res/xml/config.xml檔案,增加以下內容~
<feature name="MyPlugin">
<param name="android-package" value="com.newland.phonegap.MyPlugin"/>
</feature>
第三步,修改cordova.android.js,新增以下程式碼,注意新增的位置!!
注意程式碼新增的位置(後面那幾個括號),否則會影響其他程式碼的功能...這裡附上一張截圖~~/** * 自定義外掛 */ cordova.define("cordova/plugin/console",function(require, exports, module) { var exec = require('cordova/exec'); var modulemapper = require('cordova/modulemapper'); var console = { hello:function(msg){ exec(function(succseeMsg){ // 成功的回撥方法 alert(succseeMsg); },function(errorMsg){ // 出錯的回撥方法 alert(successMsg); },"MyPlugin" ,"helloAction" ,[]); } }; module.exports = console; }); define("cordova/plugin/console/symbols", function(require, exports, module) { var modulemapper = require('cordova/modulemapper'); modulemapper.clobbers('cordova/plugin/console', 'console'); });
第四步,修改main.js,在“deviceready”初始化執行的函式後面,新增一句呼叫外掛的程式碼
var deviceInfo = function() {
document.getElementById("platform").innerHTML = device.platform;
document.getElementById("version").innerHTML = device.version;
document.getElementById("uuid").innerHTML = device.uuid;
document.getElementById("name").innerHTML = device.name;
document.getElementById("width").innerHTML = screen.width;
document.getElementById("height").innerHTML = screen.height;
document.getElementById("colorDepth").innerHTML = screen.colorDepth;
var el = document.getElementById("cordova");
if (el) {
el.innerHTML = device.cordova;
}
console.hello("helloAction"); // 呼叫外掛
};
run起來~~彈出了成功的回撥,搞定~~~~~~~~~~~~~~
環境搭建有問題或者報錯的可以參考這兩篇部落格: