どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

zxing-android-embedded を扱う

zxing(正式にはzxing-android-embedded)は、QRコードやバーコードを読み取る機能を簡単に実現できる非常に使いやすいライブラリ。

zxingを組み込む

ライブラリの追加 (app/build.gradleに追記)

app/build.gradledependenciesスコープに以下を追加し、ライブラリを組み込む。

dependencies {
  implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
}

AndroidManifest.xmlに追記

ライブラリの要件に従い、AndroidManifest.xml<application>タグにandroid:hardwareAccelerated="true"を追加する。

<application android:hardwareAccelerated="true" 
    ...>
</application>

実装

zxingライブラリは、カメラ制御や読み取り結果の解析処理をすべて内部で処理してくれるため、 アプリ側で実装するのは「ライブラリ画面の呼び出し」と「結果の受け取り」のみ。

**ActivityResultLauncher**を使ってライブラリの画面を起動し、読み取り結果を受け取る。

1. ActivityResultLauncherの定義

registerForActivityResultを使い、読み取り画面のコントラクト(ScanContract)と結果を受け取るコールバックを実装する。

private final ActivityResultLauncher<ScanOptions> barcodeLauncher = registerForActivityResult(new ScanContract(), result -> {
    if(result.getContents() == null) {
        // ユーザーがスキャンをキャンセルした場合
        Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
    } else {
        // スキャン成功
        Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
    }
});

2. スキャン画面の起動

ボタンタップなどのイベントを契機に、定義したbarcodeLauncherを呼び出す。 ScanOptionsオブジェクトを渡すことで、QRコードだけでなくバーコードなどもスキャンできる。

public void launch(View view) {
    // スキャン画面を起動
    barcodeLauncher.launch(new ScanOptions());
}

参考

最終更新: 2025.9.28