想讓自己的 app 具有掃描 QR 碼的功能,最簡單的方式就是手機要先安裝 ZXing,再由您的 app 透過 Intent 呼叫 ZXing 代掃描 QR 碼。
在 LinearLayout 內放一個按鈕 和 一個 TextView,按鈕用來呼叫 ZXing,TextView 顯示 ZXing 傳回的結果。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zxing_main); } ... ... public void onButton1Click(View v) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); if(getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size()==0) { // 未安裝 Toast.makeText(this, "請至 Play 商店安裝 ZXing 條碼掃描器", Toast.LENGTH_LONG).show(); } else { // SCAN_MODE, 可判別所有支援的條碼 // QR_CODE_MODE, 只判別 QRCode // PRODUCT_MODE, UPC and EAN 碼 // ONE_D_MODE, 1 維條碼 intent.putExtra("SCAN_MODE", "SCAN_MODE"); // 呼叫ZXing Scanner,完成動作後回傳 1 給 onActivityResult 的 requestCode 參數 startActivityForResult(intent, 1); } } // 接收 ZXing 掃描後回傳來的結果 public void onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode==1) { if(resultCode==RESULT_OK) { // ZXing回傳的內容 String contents = intent.getStringExtra("SCAN_RESULT"); TextView textView1 = (TextView) findViewById(R.id.textView1); textView1.setText(contents.toString()); } else if(resultCode==RESULT_CANCELED) { Toast.makeText(this, "取消掃描", Toast.LENGTH_LONG).show(); } } }
因為模擬器沒有安裝 ZXing,所以按了 Button1 時,會出現提示訊息,要使用者去 Play 商店下載安裝 ZXing。
在有安裝 ZXing 的實體手機執行這個 app,它就會呼叫 ZXing
並將掃描結果回傳到 TextView 顯示,在本例中,我掃描了維基百科的 QR 碼這個主題中的 QR 碼,那個 QR 碼就是維基百科的網址。
利用 ZXing 生成 條碼 / QR code
結合 ZXing 掃描 QRcode
Genymotion 模擬器執行 Epson 範例 app,連接 TM-T70II 微型印表機列印單據