Android平臺(tái)下,自定義Cordova插件

除了使用Cordova官方的插件外,我們也可以自己寫插件,來(lái)滿足業(yè)務(wù)需求。

在Android平臺(tái),每個(gè)插件都有兩部分組成:

  • 插件的JavaScript文件
  • 插件的JAVA類

創(chuàng)建插件的JavaScript

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

可以看到Cordova自己的插件都定義在,以其包名命名的文件夾下的www目錄中,我們也按照此約定創(chuàng)建JS,指定包名為 com.test.plugin。

JS內(nèi)容如下:

// "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) {
            // 第三個(gè)參數(shù)是插件的名稱,必須與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();
});

創(chuàng)建插件的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("執(zhí)行成功回調(diào)");
            }
        });
    }

    private void test2(JSONArray args, final CallbackContext callbackContext)
            throws JSONException {
        // 在UI線程上執(zhí)行
        cordova.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(cordova.getActivity(), "Execute test2 method", Toast.LENGTH_SHORT).show();
                callbackContext.error("執(zhí)行失敗回調(diào)");
            }
        });
    }

}

配置插件

下面是配置插件,讓Cordova知道我們寫了個(gè)插件。
打開res/xml/config.xml文件,添加一個(gè)feature:

Cordova會(huì)解析config.xml文件,每個(gè)feature就是一個(gè)plugin.

key desc
feature.name plugin的名稱
android-package 指定插件的java類,必須是含包名的完整命名
onload 為true,表示webview在加載html時(shí),是否加載此插件。默認(rèn)為false,當(dāng)要使用此插件時(shí),再去加載

到這里插件就完成了,可以在JS中調(diào)用插件的方法了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容