Google Code Scanner API 提供完整的掃描程式碼解決方案,不必要求應用程式要求相機權限,同時保障使用者隱私。方法是將掃描程式碼的工作委派給 Google Play 服務,並僅將掃描結果傳回應用程式 (影片 1)。所有圖片處理作業會在裝置端進行,且 Google 不會儲存結果或圖片資料。API 支援與 ML Kit Barcode Scanning API 相同的程式碼格式,並傳回相同的 Barcode
物件。
這個 API 最適合需要順暢程式碼掃描,而不需要自訂 UI 或相機體驗的應用程式。此實作項目完全位於 Google Play 服務中,能將對應用程式大小的影響降至最低。
從 16.1.0 版開始,您可以啟用自動縮放功能,讓 Google 程式碼掃描器自動掃描距離相機較遠的條碼。當使用者將裝置指向條碼時,掃描工具就會以智慧方式偵測及放大條碼。這樣您就不需要手動調整縮放比例,讓條碼掃描速度更快、更準確,且更容易使用 (請參考影片 2)。
影片 1. Google 程式碼掃描器整合 | 影片 2. 自動縮放效果 |
如果是需要自訂 UI 的複雜用途,建議您直接使用 ML Kit Barcode Scanning API。
如果您有疑問、想要提交錯誤或需要協助,請參閱 ML Kit 社群頁面。
事前準備
如要讓應用程式做好準備,請完成下列各節的步驟。
設定應用程式
在頂層
settings.gradle
檔案的dependencyResolutionManagement
區塊下方,加入 Google Maven 存放區和 Maven 中央存放區:dependencyResolutionManagement { repositories { google() mavenCentral() } }
將
play-services-code-scanner
SDK 的 Google Play 服務依附元件,新增至模組的 Gradle 建構檔案,通常為app/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-code-scanner:16.1.0' }
您可以設定應用程式,讓 Google Play 服務在透過 Play 商店安裝應用程式時,自動將掃描器模組下載到裝置上。
<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode_ui"/> ... </application>
您也可以明確檢查掃描器模組的可用性,並透過 Google Play 服務 ModuleInstallClient API 要求下載。
如果您並未啟用安裝期間模組下載或要求明確下載,且尚未針對其他用途安裝掃描器模組,那麼 Google Play 服務會在首次使用掃描器模組時下載掃描器模組。
掃描 QR code
如要掃描條碼,請按照下列步驟操作。
選用:設定程式碼掃描器。
如果您知道需要讀取哪些條碼格式,可以將條碼偵測工具設定為僅偵測這些格式,藉此加快條碼偵測器的速度。舉例來說,如果只要偵測 Aztec 代碼和 QR code,建構
GmsBarcodeScannerOptions
物件,如以下範例所示:Kotlin
val options = GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC) .build()
Java
GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC) .build();
自動縮放功能預設為關閉狀態。如要在 16.1.0 版中啟用自動縮放功能,請呼叫
enableAutoZoom()
,如以下程式碼範例所示。Kotlin
val options = GmsBarcodeScannerOptions.Builder() .setBarcodeFormats(...) .enableAutoZoom() // available on 16.1.0 and higher .build()
Java
GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder() .setBarcodeFormats(...) .enableAutoZoom() // available on 16.1.0 and higher .build();
取得
GmsBarcodeScanner
的例項,如程式碼範例所示:Kotlin
val scanner = GmsBarcodeScanning.getClient(this) // Or with a configured options // val scanner = GmsBarcodeScanning.getClient(this, options)
Java
GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(this); // Or with a configured options // GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(context, options);
呼叫
startScan()
要求掃描程式碼。Kotlin
scanner.startScan() .addOnSuccessListener { barcode -> // Task completed successfully } .addOnCanceledListener { // Task canceled } .addOnFailureListener { e -> // Task failed with an exception }
Java
scanner .startScan() .addOnSuccessListener( barcode -> { // Task completed successfully }) .addOnCanceledListener( () -> { // Task canceled }) .addOnFailureListener( e -> { // Task failed with an exception });
處理產生的
Barcode
。Kotlin
val rawValue: String? = barcode.rawValue
Java
String rawValue = barcode.getRawValue();