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 文件中,添加 Google 的 Maven 制品库Maven 中央代码库dependencyResolutionManagement 块:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. play-services-code-scanner 添加 Google Play 服务依赖项 SDK 添加到您的模块的 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 码和 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() 请求代码扫描。

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