1.创建项目
cordova create LocalCordova com.hjk.cordova CordovaApp
2.创建插件
plugman create --name HjkPlugin --plugin_id HjkPlugin --plugin_version 1.0.0
3.HjkPlugin目录结构
src--android ---HjkPlugin.java java代码
www-HjkPlugin.js js调用配置
plugin.xml 配置页面
package.json 通过npm init 获取
HjkPlugin.java
package org.apache.cordova.bluetooth;
import android.widget.Toast;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
public class HjkPlugin extends CordovaPlugin {
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
//localTost 为对外调用的方法名
if("localToast".equals(action)){
Toast.makeText(cordova.getActivity(),"cordova plugin test :" + args.getString(0),Toast.LENGTH_LONG).show();
//callbackContext用来调用回调函数,success为调用成功的回调
callbackContext.success("toast success");
return true;
}
//error为返回错误时的回调
callbackContext.error("toast error");
return false;
}
}
HjkPlugin.js
var exec = require('cordova/exec');
// arg1:成功回调
// arg2:失败回调
// arg3:对应xml配置文件中的feature name
// arg4:plugin 插件中比对的action
// arg5:参数,json格式
// 属性中的localToast => 外部调用的对象
// exec中的localToast => plugin 插件中比对的action
var hjkFunc = {
localToast : function (success, error,arg0) {
exec(success, error, "HjkToast", "localToast", [arg0]);
}
}
module.exports = hjkFunc;
plugin.xml
<?xml version='1.0' encoding='utf-8'?>
<plugin id="HjkPlugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<!--指js文件名,而这个文件会自动以`<script`>标签的形式添加到Cordova项目的起始页。
通过在*js-module*中列出插件,可以减少开发者的工作。*clobbers*元素说明了
*module.exports*自动添加到*window*对象,让插件方法能够在窗口级别使用。-->
<name>HjkPlugin</name>
<!--文件中js-module元素定义了js的名字,它将在应用开始时自动加载。
它定义了向Cordova公开的js接口。clobbers元素指明了js对象赋值给加载的js对象。
本例中,HjkPlugin插件通过一个cordova.plugins.HjkPlugin对象向Cordova应用公开。-->
<js-module name="HjkPlugin" src="www/HjkPlugin.js">
<clobbers target="cordova.plugins.HjkPlugin" />
</js-module>
<!--它定义了某个移动平台专用的设置,包括了相关native代码的设置。可以有一个或多个平台。-->
<!--android的配置-->
<platform name="android">
<!--config-file元素定义了在插件安装过程中的改动。在例子中,一个叫HjkToast
的特性添加到Android项目的config.xml文件中,指向Java类org.apache.cordova.bluetooth.HjkPlugin-->
<config-file parent="/*" target="res/xml/config.xml">
<feature name="HjkToast">
<param name="android-package" value="org.apache.cordova.bluetooth.HjkPlugin" />
</feature>
</config-file>
<!--android权限,本例没有用到下权限,仅示例-->
<config-file parent="/*" target="AndroidManifest.xml">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</config-file>
<!--source-file元素指出了一个或多个Android native源代码文件,当插件安装时由CLI安装。
下面的例子指示plugman或CLI复制HjkPlugin.java文件到Cordova项目
Android平台文件夹的*src/org/apache/cordova/bluetooth/HjkPlugin文件夹中。jar包放到libs下-->
<source-file src="src/android/HjkPlugin.java" target-dir="src/org/apache/cordova/bluetooth" />
<source-file src="src/android/xxx.jar" target-dir="libs" />
</platform>
</plugin>
package.json
{
"name": "hjkplugin",
"version": "1.0.0",
"description": "test for plugin",
"cordova": {
"id": "HjkPlugin",
"platforms": [
"android"
]
},
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "hjk",
"license": "ISC"
}
4.项目添加插件
cordova plugin add E:\cordova_workspace\HjkPlugin
5.调用插件
onDeviceReady: function() {
this.receivedEvent('deviceready');
cordova.plugins.HjkPlugin.localToast(function (res) {
alert(res)
}, function (msg) {
alert(msg)
},"just hjk toast")
},
6.运行
cordova run android