有时候需要写一些native的东西来支持js
js代码:
var MQTTPlugin = function(){};
/**
* 初始化
* @param host
* @param port
* @param username
* @param password
* @param keepAlive
* @param cleanSession
* @param clientId
* @param initSuccess
* @param initFailure
*/
MQTTPlugin.prototype.init = function(host, port, username, password, keepAlive, cleanSession, clientId, initSuccess, initFailure){
console.log("[plugin] Create a new MQTTClient. url=" + host + ", clientId=" +clientId);
if (typeof initSuccess != "function") { initSuccess = function() {};}
if (typeof initFailure != "function") { initFailure = pluginError;}
cordova.exec(initSuccess, initFailure, 'MQTTPlugin', 'init', [host, port, username, password, keepAlive, cleanSession, clientId]);
};
js里还需要些initSuccess和initFailure的回调方法,如:
initFailure : function(message) {
console.log("[JS] init Failure");
}
initSuccess : function() {
}
android项目中写一个类继承CordovaPlugin,里面覆写execute方法(类名与传入的一致,如MQTTPlugin)
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
提示:这里的action与MQTTPlugin.prototype.init 是相对应的。
public void init(JSONArray args, CallbackContext callbackContext)
serviceIntent.putExtra("host", args.getString(0));
serviceIntent.putExtra("port", args.getInt(1));
serviceIntent.putExtra("username", args.getString(2));
serviceIntent.putExtra("password", args.getString(3));
serviceIntent.putExtra("keepAlive", args.getInt(4));
serviceIntent.putExtra("cleanSession", args.getBoolean(5));
serviceIntent.putExtra("clientID", args.getString(devil));
callbackContext用来调用相应的success与error方法,与js中的initFailure 与initSuccess 回调函数中的参数一致。
虽然js没有类型,但是android里有相对应的参数和类型,args是传入的相应的选项参数。
在android项目中的config.xml配置,如:
<feature name="MQTTPlugin">
<param name="android-package" value="com.mqtt.MQTTPlugin" />
</feature>
value值与包名一致。