Google 代码扫描程序(Beta 版)

Google 代码扫描仪 API 提供了一个完整的扫描代码解决方案,无需您的应用请求相机权限,同时保护用户隐私。具体方法是,将扫描代码的任务委托给 Google Play 服务,并仅将扫描结果返回给您的应用。所有图片处理操作都在设备上进行,并且 Google 不会存储结果或图片数据。该 API 支持与机器学习套件条形码扫描 API 相同的代码格式,并返回相同的条形码对象。

此 API 非常适合只需要扫描代码而不需要自定义界面或相机体验的应用。该实现完全在 Google Play 服务内,因此不会对应用的大小产生重大影响。对于需要自定义界面的更复杂的用例,请直接使用机器学习套件 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.0.0-beta3'
    }
  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 对象:

KotlinJava
val options = GmsBarcodeScannerOptions.Builder()
   
.setBarcodeFormats(
       
Barcode.FORMAT_QR_CODE,
       
Barcode.FORMAT_AZTEC)
   
.build()
GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
   
.setBarcodeFormats(
       
Barcode.FORMAT_QR_CODE,
       
Barcode.FORMAT_AZTEC)
   
.build();

2. 获取 GmsBarcodeScanner 的实例

KotlinJava
val scanner = GmsBarcodeScanning.getClient(this)
// Or with a configured options
// val scanner = GmsBarcodeScanning.getClient(this, options)
GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(this);
// Or with a configured options
// GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(context, options);

3. 通过调用 startScan() 请求代码扫描

KotlinJava
scanner.startScan()
   
.addOnSuccessListener { barcode ->
       
// Task completed successfully
   
}
   
.addOnCanceledListener {
       
// Task canceled
   
}
   
.addOnFailureListener { e ->
       
// Task failed with an exception
   
}
scanner
   
.startScan()
   
.addOnSuccessListener(
        barcode
-> {
         
// Task completed successfully
       
})
   
.addOnCanceledListener(
       
() -> {
         
// Task canceled
       
})
   
.addOnFailureListener(
        e
-> {
         
// Task failed with an exception
       
});

4. 处理生成的条形码

KotlinJava
val rawValue: String? = barcode.rawValue
String rawValue = barcode.getRawValue();