Android平台下,自定义Cordova插件

除了使用Cordova官方的插件外,我们也可以自己写插件,来满足业务需求。

在Android平台,每个插件都有两部分组成:

  • 插件的JavaScript文件
  • 插件的JAVA类

创建插件的JavaScript

插件所在的目录assets/www/plugins/,如果你添加了Cordova的插件,可以看到下图

可以看到Cordova自己的插件都定义在,以其包名命名的文件夹下的www目录中,我们也按照此约定创建JS,指定包名为 com.test.plugin

JS内容如下:

// "com.test.plugin.PluginTest"指定的是此插件的ID
cordova.define("com.test.plugin.PluginTest", function (require, exports, module) {

    var exec = require('cordova/exec');

    function PluginTest() {
    }

    PluginTest.prototype = {
            
        test1: function (params, successCallback, errorCallback) {
            // 第三个参数是插件的名称,必须与config.xml文件中的feature.name保持一致
            exec(successCallback, errorCallback, "PluginTest", "test1", [params]);
        },
        test2: function (params, successCallback, errorCallback) {
            exec(successCallback, errorCallback, "PluginTest", "test2", [params]);
        }
    }

    module.exports = new PluginTest();
});

创建插件的JAVA类

继承CordovaPlugin类,并重写其execute方法,约定:类中的方法名与js中的方法名保持一致,方便查找。

package com.test.plugin;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

import android.widget.Toast;

public class PluginTest extends CordovaPlugin {

    /**
     * 必须重写execute方法
     */
    @Override
    public boolean execute(String action, JSONArray args,
            CallbackContext callbackContext) throws JSONException {
        if("test1".equals(action)) {
            this.test1(args, callbackContext);
        }else if("test2".equals(action)) {
            this.test2(args, callbackContext);
        }else{
            return false;
        }
        return true;
    }

    private void test1(JSONArray args, final CallbackContext callbackContext)
            throws JSONException {
        // 开启worker线程
        cordova.getThreadPool().execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("Execute test1 method");
                callbackContext.success("执行成功回调");
            }
        });
    }

    private void test2(JSONArray args, final CallbackContext callbackContext)
            throws JSONException {
        // 在UI线程上执行
        cordova.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(cordova.getActivity(), "Execute test2 method", Toast.LENGTH_SHORT).show();
                callbackContext.error("执行失败回调");
            }
        });
    }

}

配置插件

下面是配置插件,让Cordova知道我们写了个插件。
打开res/xml/config.xml文件,添加一个feature:

Cordova会解析config.xml文件,每个feature就是一个plugin.

key desc
feature.name plugin的名称
android-package 指定插件的java类,必须是含包名的完整命名
onload 为true,表示webview在加载html时,是否加载此插件。默认为false,当要使用此插件时,再去加载

到这里插件就完成了,可以在JS中调用插件的方法了。

你可能感兴趣的:(Android平台下,自定义Cordova插件)