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

環境: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是國內專注的移動廣告平臺 ,基於強大的技術支持、優質的客服服務,爲廣告主提供精準的移動營銷和應用推廣服務,爲應用開發者提供優質的廣告展示並創造廣告收入。jquery

相關文章
相關標籤/搜索