您的位置:首页 > 移动开发 > Android开发

Android版添加phonegap--Native Api插件教程

2015-12-29 18:10 447 查看
环境:Android2.2

第三方库:PhoneGap、zxing、jqueryMobile

功能:

1)在js中调用PhoneGap提供的NativeApi,navigator.contacts.find列表显示手机联系人信息。

2)由于PhoneGap的NativeApi中没有提供二维码的扫描功能,我们自定义BarcodePlugin,来实现在js中调用扫描二维码。

查询手机联系人的关键代码:

var options = new ContactFindOptions();

options.filter = "李";

options.multiple = true;

var fields=["displayName", "phoneNumbers", "emails"];

navigator.contacts.find(fields, onSuccess, onError, options);

其中,fields表示需要查询的联系人字段,onSuccess/onError是回调(因为这个调用是异步的),options是过滤条件,如果不传表示查询所有联系人。

public class BarcodePlugin extends Plugin {

private final int CODE_REQ_BARCODE = 1;

private final int WHAT_BARCODE_SCAN = 1;

private String text;

private Object synObj = new Object();

private Handler handler = new Handler() {

public void handleMessage(Message msg) {

if(msg == null) {

return;

}

switch (msg.what) {

case WHAT_BARCODE_SCAN:

Intent intent=new Intent(ctx.getContext(), BarcodeActivity.class);

ctx.startActivityForResult(BarcodePlugin.this, intent, CODE_REQ_BARCODE);

break;

}

};

};

public PluginResult execute(String action, JSONArray args, String callbackId) {

text = "";

handler.sendEmptyMessage(WHAT_BARCODE_SCAN);

sleep();

return new PluginResult(PluginResult.Status.OK, text);

}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

if(requestCode == CODE_REQ_BARCODE) {

if(resultCode == Activity.RESULT_OK) {

text=intent.getExtras().getString("text");        

}

weakup();

} else{

super.onActivityResult(requestCode, resultCode, intent);

}

}

private void sleep() {

try {

synchronized(synObj) {

synObj.wait();

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

private void weakup(){

synchronized(synObj){

synObj.notify();

}

}

}

需要注意:execute()线程不是UI线程,不能执行UI操作(启动BarcodeActivity),这里交由handler来启动barcode扫描,然后execute线程睡眠,当扫描结束时,execute线程被唤醒,然后把扫描结果写到客户端。

KeyMob是国内专一的移动广告平台 ,基于强大的技术支持、优质的客服服务,为广告主提供精准的移动营销和应用推广服务,为应用开发者提供优质的广告展现并创造广告收入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: