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"]:用於傳參。