qt也開始支援android與ios,遺憾的是qwebkit不能在android於ios上使用,希望5.3能加入。為了能夠實現跨移動平台,選擇phonegap進行開發。phonegap的安裝大家可以參照官網www.phonegap.com。目前最新版本為2.91,本人用的是2.90版。在這裡簡單簡述下如何在phonegap下添加外掛程式,使用js調用本地函數。 詳細步驟可以參考官網: http://docs.phonegap.com/zh/3.4.0/guide_platforms_android_plugin.md.html#Android%20%E5%A4%96%E6%8E%9B%E7%A8%8B%E5%BC%8F 如果你像我一樣使用2.90的話官網的文檔(3.4.0)是無法使用的,問題出在JS調用說明部分(其餘部分可以參考官網),官方的文檔例子為 cordova.exec(function(winParam) {}, function(error) {}, "service", "action", ["firstArgument", "secondArgument", 42, false]); 如果按照官方的做法將會報錯TypeError: Result of expression 'cordova.exec' [undefined] is not a function 找不到這個方法,在網上搜了一圈都是調用cordova.exec()。沒辦法,只能是去看下源碼,既然是cordova,就找cordova.js這個檔案,果然在這個檔案裡cordova這個類沒有exec方法。不過在程式裡有一句 var exec = require('cordova/exec'); 而cordova類裡又有require。所以硬著頭皮在要調用的js檔案下使用下面的方式調用。結果這樣代碼是可以正常啟動並執行,不過正確的方式是不是這樣,這就不確定了,官方在文檔這方面的更新還是不夠快啊。 var exec = cordova.require("cordova/exec");exec(callbackok,callbackerr,"AndroidAPIforJS", "test1", ["test"]); 接下來就說下我具體的實現步驟。 第一步實現android外掛程式程式 複製代碼public class AndroidAPIforJS extends CordovaPlugin{ @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("test")) { Log.e("plugintest","ok"); callbackContext.success(); return true; } else { Log.e("plugintest","error"); callbackContext.error(0); return false; } }}複製代碼 第二步在config.xml中添加 <feature name="AndroidAPIforJS"> <param name="android-package" value="com.myexample.phonegap.AndroidAPIforJS"/> </feature> 第三部編寫js代碼 複製代碼function callbackok(){ alert("ok!"); }function callbackerr(){ alert("error!"); }var exec = cordova.require("cordova/exec");exec(callbackok,callbackerr,"AndroidAPIforJS", "test", ["test"]);複製代碼 這裡簡單說明下exec的參數 callbackok:當調用外掛程式成功時,且java程式執行callbackContext.success();被觸發。 callbackerr:當調用外掛程式失敗時,且java程式執行callbackContext.error(0);被觸發。 "AndroidAPIforJS":為外掛程式類名。 "test":用於區分外掛程式類調用方法。 ["test"]:用於傳參。