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

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 社群頁面

事前準備

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

設定應用程式

  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 服務會在首次使用掃描器模組時下載掃描器模組。

掃描 QR code

如要掃描條碼,請按照下列步驟操作。

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