Androidアプリでバーコードを読みたいんだけど
ぐぐれば、zxing を使えばいいってことはすぐに分かる。
さて、どういうコードを書けばいいのかを調べてみるが、いろいろとめんどくさいことを書いてあるブログなどを発見。
zxing をダウンロードして、android アプリのサンプルが含まれているので、そのコードを読んでみようかと思ったけど、意外とボリュームがある。
zxing のサイトで、Wikiをチェックしてたら、こういうページを発見。
≫ScanningViaIntent - zxing
既にQRコードスキャナーをインストール済みなら、これだけのコードで読み取れるらしい。
public Button.OnClickListener mScan = new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage("com.google.zxing.client.android"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0); } }; public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); // Handle successful scan } else if (resultCode == RESULT_CANCELED) { // Handle cancel } } }
ほほー。
じゃあ、Activityを呼び出すところで例外処理を追加して、zxingのActivityが無かったら、ダイアログを表示するコードを追加して、zxingのQRコードスキャナーのインストールを促す。
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage("com.google.zxing.client.android"); try { startActivityForResult(intent, REQUEST_CODE); } catch (ActivityNotFoundException e) { showDialog(R.id.download_barcode_scanner); }
で、onCreateDialog() ダイアログを表示してダウンロードするかどうかをユーザーに確認してもらって、AndroidマーケットのQRコードスキャナーのページに遷移。
@Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_NEGATIVE) return; switch (dialogId) { case R.id.download_barcode_scanner: Uri uri = Uri.parse("market://details?id=com.google.zxing.client.android"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); break; default: // hogehoge break; } }
ここでユーザーがインストールしてくれればOK!
IS01とかIS03に最初から入ってるバーコードリーダーをIntent経由で使う方法ってどこかに落ちてないかなー。