除了使用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)用插件的方法了。