官方教程:在线文档 (在右上角可以选择繁体中文,不过翻译很坑爹)
0、前言
本文以Android平台为例。环境搭建可以参考此文。
具体可以参考vibration插件,应该该官方插件内容比较简单,代码量少,实现手机震动提示功能。
1 2 3 |
phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git phonegap build android -V |
然后在eclipse里导入该项目,这样就有了一个标准的插件样本项目,就可以照葫芦画瓢啦。
插件开发主要分三块工作:1.插件的javascript模块开发;2.插件的原生java代码;3.webapp中插件的调用。下面将分别说明:
1、插件的javascript模块开发
这部分代码通常放在assets/www/plugins/目录下,例如assets/www/plugins/org.apache.cordova.vibration/www/vibration.js
在该文件中只要是定义一个模块然后通过下面这个接口与原生java进行交互
1 |
exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]); |
其中第一个参数是执行成功的回调函数,第二个是失败的回调函数。vibration中都填了NULL。
第三个参数service跟在下面这个config.xml文件中指定的<feature name>一致。
然后在res/xml/config.xml文件中指定该插件,例如:
1 2 3 |
<feature name="Vibration"> <param name="android-package" value="org.apache.cordova.vibration.Vibration" /> </feature> |
在assets/www/cordova_plugins.js中添加说明:
1 2 3 4 5 6 7 8 9 |
module.exports = [ { "file": "plugins/org.apache.cordova.vibration/www/vibration.js", "id": "org.apache.cordova.vibration.notification", "merges": [ "navigator.notification" ] } ] |
2、编写JAVA代码
在src/目录下新建包,例如org.apache.cordova.vibration(与前面调用的保持一致),然后添加java源文件。
在java中通过execute
方法与javascript进行交互。args为传递的参数。
1 2 3 4 5 6 7 8 9 |
@Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if ("beep".equals(action)) { this.beep(args.getLong(0)); callbackContext.success(); return true; } return false; // Returning false results in a "MethodNotFound" error. } |
对于需要调用别的activity的可以用下面的方法,自己新建的activity记得在AndroidManifest.xml中声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@Override public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { if ("beep".equals(action)) { final long duration = args.getLong(0); cordova.getActivity().runOnUiThread(new Runnable() { public void run() { cordova.getActivity().startActivity(new Intent(cordova.getActivity(), MainActivity.class)); callbackContext.success(); // Thread-safe. } }); return true; } return false; } |
3、调用插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<!DOCTYPE html> <html> <head> <title>Notification Example</title> <script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8"> // Wait for device API libraries to load // document.addEventListener("deviceready", onDeviceReady, false); // device APIs are available // function onDeviceReady() { // Empty } function vibrate() { navigator.notification.vibrate(2000); } </script> </head> <body> <p><a href="#" onclick="vibrate(); return false;">Vibrate</a></p> </body> </html> |