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 extendsCordovaPlugin
{
@Overridepublic boolean execute(String action, JSONArray args, CallbackContext callbackContext) throwsJSONException
{if (action.equals("test"))
{
Log.e("plugintest","ok");
callbackContext.success();return true;
}else{
Log.e("plugintest","error");
callbackContext.error(0);return false;
}
}
}
第二步在config.xml中添加
第三部编写js代码
functioncallbackok()
{
alert("ok!");
}functioncallbackerr()
{
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"]:用于传参。
原文:http://www.cnblogs.com/missccq/p/3586858.html