CompoundBarcodeViewででバーコードやQRコードを読み取る方法をメモします。
<com.journeyapps.barcodescanner.CompoundBarcodeView
android:id="@+id/barcodeView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val cameraSettings = CameraSettings().apply {
requestedCameraId = 0 // 0 = 背面カメラ, 1 = フロントカメラ
isAutoFocusEnabled = true // オートフォーカスを有効
isScanInverted = true // 明るいバーコードをスキャンしやすくする(例:白地に黒バーコード)
}
barcodeView.decodeSingle { result ->
runOnUiThread {
Toast.makeText(this, result.text, Toast.LENGTH_SHORT).show()
}
}
}
override fun onResume() {
super.onResume()
// 読取開始
barcodeView.resume()
}
override fun onPause() {
super.onPause()
// 読取停止
barcodeView.pause()
}
最初にXMLでCompoundBarcodeViewを使用します。match_parentにすると画面いっぱいにカメラビューが広がります。
CameraSettings() を使うと細かくカスタマイズでできます。他にも暗い場所でフラッシュ自動ONか、露出補正を有効にするか、連続フォーカスを有効にするかなどあります。
読取後の処理はシンプルに書きたいならdecodeSingle { result -> ... }
にて行います。
エラー処理など複雑な処理を行いたい場合は、下記のオブジェクト式decodeSingle(object : BarcodeCallback { ... })
を使用します。
barcodeView.decodeSingle(object : BarcodeCallback {
override fun barcodeResult(barcodeResult: BarcodeResult) {
runOnUiThread {
if (barcodeResult.text.isNullOrEmpty()) {
Toast.makeText(this@MainActivity, "QRコードが読み取れませんでした", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@MainActivity, "barcodeResult.text", Toast.LENGTH_SHORT).show()
}
}
}
override fun possibleResultPoints(resultPoints: MutableList<ResultPoint>?) {
// 読み取りの補助情報が取れる
}
})
参考