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)

Cordova使用Plugman创建插件—简单算术



6.2.在6.1的基础上在cmd中输入cordova plugin add D:\Cordova\CordovaPlugin\MyPlugin 提交刚刚生成的插件到指定 Cordova 项目中

Cordova使用Plugman创建插件—简单算术

Cordova使用Plugman创建插件—简单算术

Cordova使用Plugman创建插件—简单算术




至此插件已提交到Cordova项目中





第二部分使用插件


1.将Cordova项目D:\Cordova\CordovaDemo\NumberDemo\platforms android项目导入的androidstudio 中

Cordova使用Plugman创建插件—简单算术



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使用Plugman创建插件—简单算术


点击相加

Cordova使用Plugman创建插件—简单算术


......


至此一个简单的算术Cordova插件就已完成 希望对你有所帮助。