为科尔多瓦创建插件

Create plugin for cordova

我尝试制作一个 cordova 插件。 我用 plugman 创建了插件文件。 这就是我在 MathCalculator.js

中的内容
var exec = require("cordova/exec");

module.exports.mathCalculator = function (arg0, success, error) {
  cordova.exec(success, error, "MathCalculator", "add", [arg0]);
};

在 MathCalculator.java 我有:

package cordova.plugin.mathcalculator;

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 MathCalculator extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if(action.equals("add")) {
            this.add(args, callbackContext);
            return true;
        } else if(action.equals("substract")) {
            this.substract(args, callbackContext);
            return true;
        }

        return false;
    }

    private void add(JSONArray args, CallbackContext callback) {
        if(args != null) {
            try {
                int p1 = Integer.parseInt(args.getJSONObject(0).getString("param1"));
                int p2 = Integer.parseInt(args.getJSONObject(0).getString("param2"));

                callback.success("" + (p1 + p2));
            } catch (Exception ex) {
                callback.error("Something went wrong" + ex);
            }    
        } else {
            callback.error("Please do not pass null value");
        }
    }

    private void substract(JSONArray args, CallbackContext callback) {
        if(args != null) {
            try {
                int p1 = Integer.parseInt(args.getJSONObject(0).getString("param1"));
                int p2 = Integer.parseInt(args.getJSONObject(0).getString("param2"));

                callback.success("" + (p1 - p2));
            } catch (Exception ex) {
                callback.error("Something went wrong" + ex);
            }    
        } else {
            callback.error("Please do not pass null value");
        }
    }
}

然后在 config.xml 中(我把里面的内容粘贴在这里

<platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="MathCalculator">
                <param name="android-package" value="cordova.plugin.mathcalculator.MathCalculator" />
            </feature>
        </config-file>
        <config-file parent="/*" target="AndroidManifest.xml" />
        <source-file src="src/android/MathCalculator.java" target-dir="src/cordova/plugin/mathcalculator/MathCalculator" />
    </platform>

我试过在 index.js 中这样调用这个插件(添加后):

mathCalculator.add({param1: 1, param2: 3});

但是,没有定义 mathCalculator。 我导出了 mathCalculator。

我用 plugman 创建了插件,然后我在 bridge (MathCalculator.js) 中添加了 var

mathCalculator = myMethod: function (options, success, error) {
    cordova.exec(success, error, "MathCalculator", "add", [options]);
  },

module.exports = mathCalculator;

然后,在 cordova 中我可以这样调用这个方法:cordova.plugins.mathCalculator.myMethod();

如果我在插件 xml 中添加 <js-module ...><clobbers target="mathCalculator"></clobbers></js-module>,我可以直接使用 mathCalculator 名称调用我的插件。