Cordova 插件开发Android
1、创建Cordova插件类
新建java类,继承org.apache.cordova.CordovaPlugin。
import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaWebView; import org.json.JSONArray; import org.json.JSONException; public class Demo extends CordovaPlugin { @Override public void initialize(CordovaInterface cordova, CordovaWebView webView) { // TODO Auto-generated method stub super.initialize(cordova, webView); }
@Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { // TODO Auto-generated method stub return super.execute(action, args, callbackContext); }
} |
2、编写插件功能
编写插件功能需要实现在 execute(String action, JSONArray args,CallbackContext callbackContext) 方法。
import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaWebView; import org.json.JSONArray; import org.json.JSONException; public class Demo extends CordovaPlugin { private CordovaInterface cordova; @Override public void initialize(CordovaInterface cordova, CordovaWebView webView) { super.initialize(cordova, webView); this.cordova = cordova; }
@Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
final CallbackContext mCallback = callbackContext;
if("hello".equals(action)){ callbackContext.success("hello cordova!");
//如果处理时较长的话需要使用线程异步处理 /* cordova.getThreadPool().execute(new Runnable() {
@Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } mCallback.success("hello cordova!"); } });*/ } return true; }
} |
先说一下execute返回值:
返回true指的是action命令成功接受(开始)处理,并不是action命令已处理完成。这里js是不会有任何处理的,真到Action完成处理调用 mCallback.success()后返回处理结果,js才会调用成功回调函数处理返回结果。
返回false就是action未成功接受或开始处理(如未知action命令),些时js会调用异步回调函数。
尽量使用异步处理:
插件功能处理如果耗时较长都应该使用异步处理,在execute中开启一个线程,处理完了调用mCallback.success(?)或mCallback.error(?)返回处理结果。
回调:
默认情问下成功调用插件功能必须返回一个结果,通过mCallback.success(?)或mCallback.error(?)回调的方式返回。便也技持无返回,或多次返回。
无回调:
//PluginResult.Status.NO_RESULT 不返回结果 PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); //true:回调继续保持,即当前返回后后面还会有返回 false:回调结束,即当这个返回后不会再有返回 pluginResult.setKeepCallback(false); callbackContext.sendPluginResult(pluginResult); |
多次回调:
//PluginResult.Status.OK/ERROR 返回状态。OK:Js调用成功回调方法. ERROR:Js调用异常回调方法 PluginResult pluginResult = new PluginResult(PluginResult.Status.ERROR,"返回结果"); //true:回调继续保持,即当前返回后后面还会有返回 false:回调结束,即当这个返回后不会再有返回 pluginResult.setKeepCallback(true); callbackContext.sendPluginResult(pluginResult); |
3、配置加载插件
在res/xml/config.xml的widget中增加
<feature name="Demo" > <param name="android-package" value="插件类名" ></param> </feature> |
name:为插件名称,在Js调用会使用到
4、js调用插件
通调exec调用
//加载依赖库 var cordova = require('cordova'), exec = require('cordova/exec'); //调用插件功能 exec(successCallback, errorCallback, "Demo", "hello", jsonstr); |
successCallback:成功回调方法
errorCallback:失败回调方法
"Demo":插件名称,配制在config.xml:feature 属性 name;
"hello":action名称
jsonstr:参数,JSON格式
封装成友好的方法调用
demo_plugin.js
cordova.define("com.xxx.plugins.Demo", function(require, exports, module) {
var cordova = require('cordova'), exec = require('cordova/exec'); var Demo= function(){
} Demo.prototype.connect=function(successCallback, errorCallback,jsonstr) { exec(successCallback, errorCallback, "Demo", "hello", jsonstr); }; var demo= new Demo(); module.exports = demo; }); |
在cordova_plugins.js module.exports中增加一项
{ "file": "demo_plugins.js", //插件js路径 "id": "com.xxx.plugins.Demo", //这里使用类名,其他也可以,只要不重复 "clobbers": [ "Demo" //Js插件对像名后,载入后通过这个名称调用 Demo.hello(.....); ] } |
在cordova_plugins.js module.exports.metadata中增加一项
"com.xxx.plugins.Demo": "1.0.0" |
com.xxx.plugins.Demo必须和exports中的id一样。
1.0.0:标识可随意
在HTML中调插件
<script type="text/javascript" src="https://blog.csdn.net/yxz30/article/details/cordova.js"></script> <!--<script type="text/javascript" src="https://blog.csdn.net/yxz30/article/details/cordova_plugins.js" ></script>--> |
cordova.js必须引入.
cordova_plugins.js如果和cordova.js在同一目录下,会自动引入。
调用插件:
Demo.hello(function(data) { alert("成功=" data); }, function(err) { alert("失败=" err); },{data:124}); |
-------END-----
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhffiaia
-
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24 -
微信小程序没声音怎么办
PHP中文网 06-15 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
使用云服务器搭建个人游戏加速器教程
AuroraJay 07-06 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11 -
Excel筛选和排序是灰色的怎么办
PHP中文网 06-22 -
抖音国际版要用什么加速器能流畅刷Tiktok的加速器
TK小达人 08-02 -
键盘上的负数是哪个键
PHP中文网 03-17