PhoneGap插件Android Barcode Scanner精简版是本文要介绍的内容,主要是来了解PhoneGap插件的使用,phonegap plugins里的barcode scanner,用的是ZXing。结果android版竟然要安装apk才能用,一看,这货直接Intent的…无法,从ZXing拉了源码下来自己整合,结果在浩瀚的java文件中哭了(T_T)。于是找了篇精简教程,照着画了下葫芦,然后整成phonegap插件,终于能凑合用用了,效果也还满意写。
如何开发一个android phonegap插件(要翻墙)
js部分
- PhoneGap.exec( success, failure, service, action, args );
这个原型据说1.x以后会改成 PhoneGap.exec(options)。
success – 成功后的回调函数,回调参数根据java端返回的类型而定,一般为String。
failure – 失败后的回调函数,回调参数一般为error code。
service – 插件的名称。
action – 插件功能的名称。
args – 功能所需的参数,一个Object。
如果调用的插件函数无需参数,最后一个args必须是一个空数组[],不能不传、不能传null、也不能传{},否则会报错jsonError。
java部分
每个插件都要继承com.phonegap.api.Plugin,然后override execute方法,方法原型
- PlugResult execute(String action, JSONArray data, String callbackId);
action – js调用时所传的action。
data – js调用时所传的args。
callbackId – 这个是用来回调的指定id,由js部分自动生成,并传递给java。
返回的是一个PlugResult的,如果是同步调用,直接在execute函数中返回一个带状态的标示的PlugResult即可,比如
- return new PlugResult(PluginResult.Status.INVALID_RESULT); 或者
- return new PlugResult(PluginResult.Status.OK, content); content既是js success callback参数
而如果是异步调用,则需要返回一个NO_RESULT状态的PlugResult,并设置keepCallabck,然后记录下callbackId,如下
- callback = callbackId;
- PlugResult result = new PlugResult(PlugResult.Status.NO_RESULT);
- result.setKeepCallback(true);
之后,在需要回调时,调用
- this.success(new PlugResult(PlugResult.Status.OK, content), this.callback);
android部分
需要使用插件的时候,要在res/xml/plugins.xml里加一个对插件的引用
- <plugin name=”" value=”"/>
name是插件名称,也是js调用时的service名,注意这个必须和java的类名一致,否则报错class not found。
value就是包含package的完整类名。
然后设置AndroidManifest.xml,因为用Intent调用ZXing提供的扫描功能,所以在manifest里,找到<application>标签,增加一个<activity>,然后设置一些属性和intent-filter。注意activity的name要和java的类名相同,intent-filter的action name以及category name要和代码中调用的名字相同。
我在github上建立的一个项目,里面包含了所有源文件——phonegap用的是刚出炉的1.0版,barcode部分是用了上面提到的高人精简过的。
小结:PhoneGap插件Android Barcode Scanner精简版的内容介绍完了,希望通过本文的学习能对你有所帮助!