Google Code Scan API 提供完整的掃描程式碼解決方案,您不必要求應用程式要求使用者授予相機權限,同時也能保障使用者隱私。方法是將程式碼掃描工作傳送至 Google Play 服務,只將掃描結果傳回您的應用程式。所有圖片處理作業都是在裝置上進行,Google 不會儲存結果或圖片資料。這個 API 支援與 ML Kit Barcode Scanning API 相同的程式碼格式,並傳回相同的 Barcode 物件。
此 API 非常適合需要掃描程式碼,而且不需要自訂 UI 或相機體驗的應用程式。實作完全位於 Google Play 服務中,因此不會對應用程式的大小產生重大影響。如需更需要自訂 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.0.0-beta3' }
您可以設定應用程式,讓 Google Play 服務在從 Play 商店安裝應用程式時自動下載掃描器模組。
<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode_ui"/> ... </application>
您也可以明確檢查掃描器模組是否可用,以及透過 Google Play 服務 ModuleInstallClient API 要求下載。
如果您未啟用安裝時模組下載或要求明確下載,Google Play 服務會在第一次使用掃描工具模組時進行下載 (如果尚未安裝,以供其他用途使用)。
掃描圖碼
1. (選用) 設定程式碼掃描器
如果知道您預期讀取哪些條碼格式,則可以將其設定為只偵測這些格式,藉此改善條碼偵測器的速度。舉例來說,如果只要偵測 Aztec 程式碼和 QR 圖碼,請建構 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();
2. 取得 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);
3. 呼叫 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 });
4. 處理產生的 Barcode
Kotlin
val rawValue: String? = barcode.rawValue
Java
String rawValue = barcode.getRawValue();