今回は、Android アプリに、QRコードリーダーの機能を実装する方法についてです。
ライブラリは「zxing-android-embedded」を使用しました。
なお、諸事情あって古いバージョンで導入していますが、実装方法は同じです。
参考にさせていただいた記事はこちら。
AndroidでZXingを使ってQRコードを読み取る | 山本隆の開発日誌
https://www.gesource.jp/weblog/?p=8395
ライブラリをプロジェクトに導入します。
まず、app/build.gradle に下記を追加します。
dependencies {
......
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
}
上記を追加したら、Sync Project を実行してください。
次に、AndroidManifest.xml に下記を追加します。
<application
......
android:hardwareAccelerated="true">
......
</application>
ここまで追加したら、一度プロジェクトをビルドしてください。
エラーが発生しなければ、ライブラリの追加は成功です。
次に、プロジェクトにQRコードリーダーを起動する処理を追加していきます。
今回はQRコードリーダー起動用のボタンを設置して、リーダーを起動させるようにしました。
サンプルコードは下記のとおりです。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scanQrCode();
}
});
// QRコードリーダーを起動する
public void scanQrCode() {
new IntentIntegrator(this)
.setOrientationLocked(false)
.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
.initiateScan();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// QRコードを読み込んだ後の処理
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null && result.getContents() != null) {
// QRコードのデータを取得する
Log.d("MainActivity", result.getContents());
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
上記コードでは、まずボタンをタップしたら scanQrCode() という関数を呼び出して、QRコードリーダーを起動します。
その後、リーダーでQRコードを読み込んだら、オーバーライドした onActivityResult() が呼び出されるので、その中で任意の処理を実行します。
なお、QRコードリーダーを起動した状態で、端末の戻るボタンを押してリーダーを終了しても onActivityResult() が呼び出されるようなので、20行目のように result.getContents() でQRコードから取得できたデータがあるかどうかをチェックするようにしましょう。
私はうっかりこの処理を指定し忘れたため、QRコード起動→端末の戻るボタンで戻るという処理をしたらアプリが落ちるというバグを発生させてしまいました…。
皆様もお気を付けください。
以上、Android にQRコードリーダー機能を実装する方法についてでした。
ご参考になれば幸いです。