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 或需要帮助,请查看 机器学习套件社区页面

<ph type="x-smartling-placeholder">

准备工作

<ph type="x-smartling-placeholder">

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

配置您的应用

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