想讓自己的 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 微型印表機列印單據