Google 扫码器(仅限 Android)

Google 扫码器 API 提供完整的代码扫描解决方案,无需应用请求相机权限,同时保护用户隐私。为此,您需要将扫描代码的任务委托给 Google Play 服务,并将扫描结果仅返回给您的应用(视频 1)。所有图片处理操作都在设备上进行,Google 不会存储结果或图片数据。该 API 支持与 ML Kit Barcode Scanning API 相同的代码格式,并返回相同的 Barcode 对象。

此 API 非常适合需要无缝代码扫描而无需自定义界面或相机体验的应用。该实现完全位于 Google Play 服务中,可确保对应用大小的影响微乎其微。

从版本 16.1.0 开始,您可以启用自动缩放功能,以允许 Google 二维码扫描器自动扫描远离摄像头的条形码。当用户将设备对准条形码时,扫描器会以智能方式检测并放大条形码。这样您就无需手动调整缩放级别,从而可以更快、更准确、更方便地扫描条形码(参见视频 2)。

视频 1. 集成 Google 扫码器 视频 2. 自动缩放效果

对于需要自定义界面的更复杂的用例,我们建议直接使用 ML Kit Barcode Scanning API

如果您有疑问、想要提交 bug 或需要帮助,请查看机器学习套件社区页面

准备工作

为了让您的应用做好准备,请完成以下部分中的步骤。

配置您的应用

  1. 在顶级 settings.gradle 文件的 dependencyResolutionManagement 代码块下,添加 Google 的 Maven 制品库Maven 中央制品库

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. play-services-code-scanner SDK 的 Google Play 服务依赖项添加到模块的 Gradle build 文件(通常为 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 码和二维码,请按照以下示例构建 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();