【Android】「zxing-android-embedded」ライブラリでQRコードリーダー機能を実装する

今回は、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コードリーダー機能を実装する方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG