Cordova使用Plugman创建插件—简单算术
本章节讲述AndroidStudio使用Plugman生成Cordova插件 简单算术
按照上一节的思路分别创建Cordova项目和Plugman插件
plugin.xml文件中几个重要的属性
1.clobbers : 非常重要。前端工程师在使用的时候通过这个 clobbers 去调用www/XXXXX.js的公开方法
2.feature 标签定义了 (服务名)name
3.param name=”ios-package” value=”MyMath” 定义iOS平台下的底层实现类
4.param name=”android-package” value=”SimpleMath.MyMath” 定义Android平台下的底层实类
5.完成以上四步即可初步完成插件的创建 还有两个最重要的文件
5.1
.../www/XXXXX.js文件 即你生成插件文件夹下 www文件夹下的js文件 此文件调用原生java的方法 同时暴露给js调用
5.2
.../src/android/XXXXX.java文件 即你生成插件文件夹下 src文件夹下 android文件夹下的java类 此类主要操作插件的方法
MyPlugin.js文件
原
var exec = require('cordova/exec');
exports.coolMethod = function(arg0, success, error) {
exec(success, error, "MyPlugin", "coolMethod", [arg0]);
};
修改为(本demo做简单的加减乘除)
var exec = require('cordova/exec');
var myMathFunc = function(){};
myMathFunc.prototype.plus = function(arg0, success, error) {
exec(success, error, "MyPlugin", "Plus", arg0);
};
myMathFunc.prototype.minus = function(arg0, success, error) {
exec(success, error, "MyPlugin", "Minus", arg0);
};
myMathFunc.prototype.multiply = function(arg0, success, error) {
exec(success, error, "MyPlugin", "Multiply", arg0);
};
myMathFunc.prototype.division = function(arg0, success, error) {
exec(success, error, "MyPlugin", "Division", arg0);
};
var MYMATHFUNC = new myMathFunc();
module.exports = MYMATHFUNC;
注意: 需要说明的是,这个cordova方法exec里的参数分别为:
【success】 : 成功回调
【error 】 : 失败回调
【MyPlugin】 : 服务名(必须和 plugin.xml定义的服务名保持一致)
【Multiply】 : Action 动作名。(底层实现根据Action字符串调用不同的方法)
【arg0】: 参数,必须是数组。
可以是json的数据:[{“key”:”value”,”key”:”value”}]
也可以是[“value1”,”value2”,”value3”,…]
举例
1.js入参如果是[“value1”,10,”value3”,…] Android端实现CordovaPlugin的java类则可以使用:
第一个参数 : args.getString(0)
第二个参数 : args.getInt(1)
第三个参数 :args.getString(2)…
接收
2.js入参如果是[{“key”:”value”,”key”:”value”}] Android端实现CordovaPlugin的java类则可以使用:
JSONArray jsonarray = new JSONArray(args.getString(0));
JSONObject json = jsonarray.getJSONObject(0); //再根据key取值
接收
6.完成以上步骤基本插件就差不多完成 下面将插件提交到某个Cordova项目中
6.1.cmd中定位到要插入的Cordova项目(本人Cordova项目目录D:\Cordova\CordovaDemo\NumberDemo)
6.2.在6.1的基础上在cmd中输入cordova plugin add D:\Cordova\CordovaPlugin\MyPlugin 提交刚刚生成的插件到指定 Cordova 项目中
至此插件已提交到Cordova项目中
第二部分使用插件
1.将Cordova项目D:\Cordova\CordovaDemo\NumberDemo\platforms android项目导入的androidstudio 中
2.修改MyPlugin.java
package org.apache.myplugin; import android.widget.Toast; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CallbackContext; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * This class echoes a string called from JavaScript. */ public class MyPlugin extends CordovaPlugin { @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if ("Plus".equals(action)) {//相加action int A = args.getInt(0); int B = args.getInt(1); this.plus(A, B, callbackContext); return true;//注意一定要返回 true } else if ("Minus".equals(action)) {//相减action int A = args.getInt(0); int B = args.getInt(1); this.minus(A, B, callbackContext); return true; //注意一定要返回 true }else if("Multiply".equals(action)){//相乘action int A = args.getInt(0); int B = args.getInt(1); this.multiply(A, B, callbackContext); return true; //注意一定要返回 true }else if("Division".equals(action)){//相除action int A = args.getInt(0); int B = args.getInt(1); this.division(A, B, callbackContext); return true; //注意一定要返回 true } return false; } //相加方法 private void plus(int A, int B, CallbackContext callbackContext) { if(A!=0&&B!=0){ int result=A+B; String re=A+"+"+B+"="+result; callbackContext.success(re); }else{ callbackContext.error("Two Numbers can't be zero!"); } } //相减方法 private void minus(int A, int B, CallbackContext callbackContext) { if(A!=0&&B!=0){ int result=A-B; String re=A+"-"+B+"="+result; callbackContext.success(re); }else{ callbackContext.error("Two Numbers can't be zero!"); } } //相乘方法 private void multiply(int A, int B, CallbackContext callbackContext) { if(A!=0&&B!=0){ int result=A*B; String re=A+"*"+B+"="+result; callbackContext.success(re); }else{ callbackContext.error("Two Numbers can't be zero!"); } } //相除方法 private void division(int A, int B, CallbackContext callbackContext) { if(A!=0&&B!=0){ int result=A/B; String re=A+"÷"+B+"="+result; callbackContext.success(re); }else{ callbackContext.error("Two Numbers can't be zero!"); } } }
3.修改index.js
function plusMethod1(){ cordova.plugins.MyPlugin.plus([0,0],success , error); } function plusMethod2(){ cordova.plugins.MyPlugin.plus([50,50],success , error); } function minusMethod1(){ cordova.plugins.MyPlugin.minus([0,0],success , error); } function minusMethod2(){ cordova.plugins.MyPlugin.minus([50,20],success , error); } function multiplyMethod1(){ cordova.plugins.MyPlugin.multiply([0,0],success , error); } function multiplyMethod2(){ cordova.plugins.MyPlugin.multiply([10,10],success , error); } function divisionMethod1(){ cordova.plugins.MyPlugin.division([0,0],success , error); } function divisionMethod2(){ cordova.plugins.MyPlugin.division([100,10],success , error); } function success(msg){ console.log(msg); alert(msg); } function error(msg){ console.log(msg); alert(msg); }
4.修改index.html
<!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> <hr> <hr> <hr> <button onclick="plusMethod1();">0+0</button> <hr> <hr> <hr> <button onclick="plusMethod2();">50+50</button> <hr> <hr> <hr> <button onclick="minusMethod1();">0-0</button> <hr> <hr> <hr> <button onclick="minusMethod2();">50-20</button> <hr> <hr> <hr> <button onclick="multiplyMethod1();">0*0</button> <hr> <hr> <hr> <button onclick="multiplyMethod2();">10*10</button> <hr> <hr> <hr> <button onclick="divisionMethod1();">0/0</button> <hr> <hr> <hr> <button onclick="divisionMethod2();">100/20</button> <hr> <hr> <hr> </body> </html>
5.在AndroidStudio运行
点击相加
......
至此一个简单的算术Cordova插件就已完成 希望对你有所帮助。