6
4

Googleコードスキャナを使ってAndroidアプリにQRコード読み取り機能をお手軽導入

Posted at

Androidアプリでワンショットのコードスキャン機能が滅茶苦茶簡単に実装できるようになっていました。というネタ

この記事に書かれている通りなので、蛇足も蛇足ですが...アプリのメイン機能ではなく、特定の手続きで1回だけなど、QRコードを読み取り機能が欲しくなることはよくあります。
この方法を使えばカメラパーミッションも不要で、簡単にQRコードを読み取ることができます。(世の中にはカメラを搭載していない端末もあるので、プロダクトで利用する場合、その考慮は必要かと思いますが)
Google開発者サービスがスキャン機能を提供しており、アプリはスキャン結果のみを受けとるというものです。アプリがカメラ画像に一切アクセスしないため、プライバシーポリシーのケアなども(規約上は)不要です。

使い方

com.google.android.gms:play-services-code-scanner をdependenciesに追加

build.gradle.kts
dependencies {
...
    implementation("com.google.android.gms:play-services-code-scanner:16.1.0")
}

AndroidManifestのapplicationタグ内にmeta-dataタグを追加

<manifest>
...
    <application>
    ...
        <meta-data
            android:name="com.google.mlkit.vision.DEPENDENCIES"
            android:value="barcode_ui"/>
    </application>
</manifest>

GmsBarcodeScanningを呼び出し、結果を受けとる

findViewById<View>(R.id.button).setOnClickListener {
    GmsBarcodeScanning.getClient(this)
        .startScan()
        .addOnSuccessListener {
            Toast.makeText(this, "${it.rawValue}", Toast.LENGTH_LONG).show()
        }
}

以上!超簡単

読み取りの指定

この機能はQRコードだけではなく、バーコードを始め様々なコードを読み取ることが可能です。
実際のユースケースでは何か特定のフォーマットを読み取らせたいでしょうから、それを指定して利用するのが通常でしょう。その場合はGmsBarcodeScannerOptionsを使います。

val options = GmsBarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .build()
GmsBarcodeScanning.getClient(this, options)
...

とすれば、QRコードだけを読み取ってくれます。

また、16.1.0以降は、自動ズーム機能を指定することができます。

val options = GmsBarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .enableAutoZoom()
    .build()
GmsBarcodeScanning.getClient(this, options)
...

私が使った範囲では、どういう条件でズームされるのかなどがいまいち分からず、便利なのかはよく分かりませんでした。

コールバック

startScan()の戻り値はTaskですので、success以外のコールバックも登録可能です。

GmsBarcodeScanning.getClient(this, options)
    .startScan()
    .addOnSuccessListener {
    }
    .addOnCanceledListener {
    }
    .addOnFailureListener {
    }
    .addOnCompleteListener {
    }

失敗したりキャンセルされた場合にユーザーにメッセージを表示したりも簡単に実装できます。

以上です。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4