zxing-android-embedded を扱う
zxing
(正式にはzxing-android-embedded
)は、QRコードやバーコードを読み取る機能を簡単に実現できる非常に使いやすいライブラリ。
zxingを組み込む
ライブラリの追加 (app/build.gradle
に追記)
app/build.gradle
のdependencies
スコープに以下を追加し、ライブラリを組み込む。
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