以下方法是建立在已经搭建好phoneGap+android的环境下运行的,编译平台为eclipse。
phoneGap版本为2.9.1。
用途:js与java的数据交互,调用方式为回调函数。
单插件注册流程如下:
有4个地方需要修改:
1./xml/config.xml
2.cordova.js
3.创建一个类(一个插件对应一个,多插件则要创建多个)
4.网页js调用代码
举个例子,我想在js中创建一个名叫connectServ的js函数,用java中的responConctSrev类进行处理相互传参。过程如下:
在config.xml添加
<feature name="responConctSrev">
<param name="android-package" value="com.myplugin.responConctSrev"/>
</feature>
作用是声明一个回调函数类的位置。
在cordova.js最后添加
/** 自定义插件*/
cordova.define("cordova/plugin/console",function(require, exports, module) {
var exec = require('cordova/exec');
var modulemapper = require('cordova/modulemapper');
var console = {
connectServ:function(msg){
exec(function(succseeMsg){ //成功回调
alert(succseeMsg);
},function(errorMsg){ // 失败回调
// alert("nima");
alert(errorMsg);
},"responConctSrev"
,msg
,[]);
},
};
module.exports = console;
});
define("cordova/plugin/console/symbols", function(require, exports, module) {
var modulemapper = require('cordova/modulemapper');
modulemapper.clobbers('cordova/plugin/console', 'console');
});
//注意此是cordova.js文件最后一行
})();var PhoneGap = cordova;
注意一下 var console={….};这个变量。这里面有一个方法,叫connectServ,有5个参数,网上有详细的介绍,我就说说几个参数功能。
第一个参数为成功时的回调函数
第二个参数为失败时的回调函数
第三个参数为在config.xml中注册的class名字
第四个参数为传入的string字符串变量,会通过调用传到java文件中
第五个参数为一个jason数组
其他为模板不变。
根据config.xml的配置创建一个responConctSrev类
首先新建一个名叫com.myplugin的包,
然后在此包下创建一个名叫responConctSrev的class。
内容如下
package com.myplugin;
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 responConctSrev extends CordovaPlugin {
//private String helloAction = "helloAction";
@Override
public boolean execute(String str, JSONArray args, CallbackContext callbackContext) throws JSONException
{
//js成功调用后会传入一个字符串参数str
//callbackContext.success("congratulation,success"); return true; //回调成功时发送的结果,js会接收到
//callbackContext.error("sorry,error"); return false;
Log.i("Hey", str);
return true;
}
}
最后通过js调用,调用方式为console. connectServ(要传入的字符串内容).
多插件注册
在以上的基础上稍加修改即可
比如我要增加一个js方法startActivity对应java中的responActivity类
1.config.xml文件中添加
<feature name="responActivity">
<param name="android-package" value="com.myplugin.responActivity"/>
</feature>
同样在com.myplugin包下创建一个responActivity类,内容如下:
package com.myplugin;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import android.util.Log;
//startactivity 回调函数
public class responActivity extends CordovaPlugin{
//private String helloAction = "helloAction";
@Override
public boolean execute(String str, JSONArray args, CallbackContext callbackContext) throws JSONException
{
//js成功调用后会传入一个字符串参数str
//callbackContext.success("congratulation,success"); return true; //回调成功时发送的结果,js会接收到
//callbackContext.error("sorry,error"); return false;
Log.i("activity", str);
return true;
}
}
可以看到结构基本上都是一致的。
在cordova.js 添加插件方法注册,最终会变成如下:
/*
** 自定义插件*/
cordova.define("cordova/plugin/console",function(require, exports, module) {
var exec = require('cordova/exec');
var modulemapper = require('cordova/modulemapper');
var console = {
connectServ:function(msg){
exec(function(succseeMsg){ //成功回调
sleep(1000);
alert(succseeMsg);
},function(errorMsg){ // 失败回调
// alert("nima");
alert(errorMsg);
},"responConctSrev"
,msg
,[]);
},
startActivity:function(msg){
exec(function(succseeMsg){ //成功回调
sleep(1000);
alert(succseeMsg);
},function(errorMsg){ // 失败回调
// alert("nima");
alert(errorMsg);
},"responActivity"
,msg
,[]);
}
};
module.exports = console;
});
define("cordova/plugin/console/symbols", function(require, exports, module) {
var modulemapper = require('cordova/modulemapper');
modulemapper.clobbers('cordova/plugin/console', 'console');
});
})();var PhoneGap = cordova;
以上可以看成我只是在var console = {}添加了一个方法,就完成了第二个插件的注册。
调用方式依然为console. startActivity(字符串)
对于console的注册还是不太明白。还不知道怎么改。
调用部分代码
function test(msg)
{
console.startActivity(msg);
console.connectServ("hehe");
}
成功是会输出一个输入的字符串。