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


