上一篇博客,写道了 Cordova 插件的创建,接下来讲一下简单使用。
ps. 这里最好在创建的那个插件上修改下面内容,做完之后再安装一下插件,android 里面的代码也会更新。
这里希望在网页上加一个按钮,点击一下就触发一个 Toast,修改插件 www 目录下的 Test.js 文件,修改其中方法如下:
var exec = require('cordova/exec');
exports.toastSomething = function (arg0, success, error) {
exec(success, error, 'Test', 'toastSomething', [arg0]);
};
其中 success, error 是成功失败的回调,Test 是插件名,toastSomething 是一个 action,可以近似认为是方法(可以通过反射去调用方法),可以通过 arg0 传递参数。
上面插件已经提供了一个叫 toastSomething 的功能,现在在 H5 上去调用它。
修改项目 www 目录下的的 index.html 文件,增加一个 button,设置好 id:
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>Hello Worldtitle>
head>
<body>
<div class="app">
<h1>Apache Cordovah1>
<button id="button">点击触发Toastbutton>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Devicep>
<p class="event received">Device is Readyp>
div>
div>
<script type="text/javascript" src="cordova.js">script>
<script type="text/javascript" src="js/index.js">script>
body>
html>
接着在修改 www 目录下的 js,为 button 增加一个点击事件:
//点击事件
document.getElementById('button').addEventListener('click', function () {
cordova.plugins.Test.toastSomething('click from h5')
})
直接在末尾追加就行,很简单的逻辑,点击就调用插件的方法。
在 h5 里面调用插件的方法后,原生的插件就会被调用,在 Android 项目中的插件修改:
public class Test extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("toastSomething")) {
String message = args.getString(0);
this.toastSomething(message, callbackContext);
return true;
}
return false;
}
private void toastSomething(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
Activity activity = this.cordova.getActivity();
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
callbackContext.success(message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}
就是读取 action,选择对应的方法并执行,可以从 args 里面取出传过来的参数,即上面传递的 “click from h5”。
按上面三个步骤修改,一个简单的 Cordova 插件功能就实现了。回到项目目录,打开命令行,输入:
cordova build android -d
将东西打包,并生成 apk,我是觉得运行一遍后,就可以直接在 Android studio 上调试了。
安装到设备上,点击按钮,看看有没有 toast,这里我试过了,是没问题的(才怪!)。
真TM天下乌鸦一般抄,一个功能全网一模一样,没一个人验证能不能用,如果按上面操作,绝对不会弹出 Toast 的,问题就出在 plugin_id 上,这里根本不能用 “.” 号!!!看看其他的插件都是用的 “-”,改一下就好了,并订正 plugin.xml 里面安卓项目的 target-dir,这里改成 “.” 。