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