android 掃碼設備獲取掃碼回調內容實踐

android 手持掃碼設備獲取掃碼回調內容實踐

Github地址:https://github.com/xieyuhai/qr

最近參加一個掃描設備(掃碼槍掃描)的開發,內置掃碼槍功能,掃描設備的二維碼接收模式有三種,設置界面如下:

- **圖片鏈接和圖片上傳**

其中前兩種的接收模式比較類似,只需要佈局一個文本框即可
根據文本框的焦點設置值,這種方式有點類似模擬的鍵盤輸入(比較不可控),當鍵盤彈出並且中文輸入的情況,會出現二維碼返回數據中的一些英文以中文的方式顯示在文本框了,客戶使用的時候會感覺不太友好,也不太符合需求,於是使用廣播的方式來獲得掃碼後的回調數據。

掃碼部分硬件已經實現,主要是獲得掃碼的回調

MainActivity.java

註冊廣播指定發送廣播的action

public class MainActivity extends Activity implements QRListener {

private EditText qrEditText;
private TextView deleteTextView;
private QRReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initView();
    initEvent();

    initReceiver();
}
動態註冊廣播

private void initReceiver() {
receiver = new QRReceiver();
receiver.setListener(this);
registerReceiver(receiver, new IntentFilter(“com.barcode.sendBroadcast”));
}

private void initEvent() {
deleteTextView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            qrEditText.setText("");
        }
    });
}
private void initView() {
qrEditText = (EditText) findViewById(R.id.qrEditText);

deleteTextView = (TextView) findViewById(R.id.deleteTextView);
}
//二維碼回調數據設置顯示
@Override
public void getQRData(String data) {
qrEditText.setText(data);
}
//
@Override
protected void onDestroy() {
if (receiver != null) {
unregisterReceiver(receiver);
receiver = null;
System.gc();
}
super.onDestroy();
}

QRReceiver.java
通過廣播接收二維碼的數據並將數據傳遞

public class QRReceiver extends BroadcastReceiver {
private QRListener listener;

public void setListener(QRListener listener) {
    this.listener = listener;
}

@Override
public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();

    if (action != null && action.startsWith("com.barcode.sendBroadcast")) {

        String data = intent.getStringExtra("BARCODE");
        if (listener != null) {
            listener.getQRData(data);
        }

        Toast.makeText(context, data, Toast.LENGTH_SHORT).show();
    }
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章