Google 程式碼掃描器 (僅限 Android)

Google 程式碼掃描器 API 提供完整的解決方案,可用於掃描應用程式,且不需要應用程式要求相機權限,同時保障使用者隱私。方法是將程式碼掃描給 Google Play 服務,並只將掃描結果傳回您的應用程式 (影片 1)。所有影像處理作業都會在裝置中完成,Google 不會儲存結果或圖片資料。API 支援與 ML Kit Barcode Scanning API 相同的程式碼格式,並傳回相同的 Barcode 物件。

如果應用程式需要流暢掃描程式碼,且不需要自訂 UI 或相機體驗,就很適合使用這個 API。而且這些實作完全位於 Google Play 服務中,可確保對應用程式大小的影響降到最低。

從 16.1.0 版開始,啟用自動縮放功能,讓 Google 程式碼掃描器自動掃描遠離相機的條碼。當使用者將裝置對準條碼時,掃描器將聰明地偵測並放大條碼。這樣就不必手動縮放縮放,就能加快條碼掃描速度,並取得更準確且易於存取的內容 (請見影片 2)。

影片 1:Google 程式碼掃描器整合 影片 2:自動縮放效果

如果是需要自訂 UI 的複雜用途,建議您直接使用 ML Kit Barcode Scanning API

如有任何疑問、想提交錯誤或需要協助,請查看 ML Kit 社群頁面

事前準備

如要讓應用程式做好準備,請完成下列各節的步驟。

設定應用程式

  1. 在頂層 settings.gradle 檔案的 dependencyResolutionManagement 區塊下方,加入 Google Maven 存放區Maven 中央存放區

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. play-services-code-scanner SDK 的 Google Play 服務依附元件新增至模組的 Gradle 建構檔案,通常為 app/build.gradle

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. 您可以設定應用程式,讓 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();
    

    自動縮放功能預設為關閉。如要在 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();
    
  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() 即可要求掃描 QR 圖碼。

    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();