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

Google 程式碼掃描器 API 提供完整的程式碼掃描解決方案,不必要求應用程式取得相機權限,同時保護使用者隱私。方法是將掃描代碼的工作委派給 Google Play 服務,然後只將掃描結果傳回應用程式 (影片 1)。所有影像處理作業都會在裝置中完成,Google 不會儲存結果或影像資料。這項 API 支援與 ML Kit 條碼掃描 API 相同的程式碼格式,並傳回相同的 Barcode 物件。

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

從 16.1.0 版開始,你可以啟用自動縮放功能,讓 Google 條碼掃描器自動掃描遠離鏡頭的條碼。使用者將裝置對準條碼時,掃描器會智慧偵測並放大條碼。這樣就不必手動調整縮放比例,讓條碼掃描速度更快、更準確,也更易於使用 (請參閱影片 2)。

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

如需自訂 UI 的複雜用途,建議直接使用 ML Kit 條碼掃描 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 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();
  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();