phoneGap插件

有时候需要写一些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值与包名一致。

你可能感兴趣的:(phoneGap插件)