Google 代码扫描器 API 提供了一个完整的代码扫描解决方案,无需应用请求相机权限,同时保护用户隐私。为此,您可以将扫描二维码的任务委托给 Google Play 服务,并仅将扫描结果返回给您的应用(视频 1)。所有图片处理操作都在设备上进行,并且 Google 不会存储结果或图片数据。该 API 支持与 ML Kit 条形码扫描 API 相同的代码格式,并返回相同的 Barcode
对象。
此 API 非常适合需要无缝扫描代码且无需自定义界面或相机体验的应用。该实现完全位于 Google Play 服务中,可确保对应用大小的影响降到最低。
从 16.1.0 版开始,您可以启用自动缩放功能,让 Google 代码扫描器自动扫描距离相机较远的条形码。当用户将设备对准条形码时,扫描器会智能检测并放大条形码。这样,您无需手动调整缩放,让条形码扫描更快速、更准确、更易用(请参阅视频 2)。
视频 1. 与 Google 代码扫描器的集成 | 视频 2. 自动缩放效果 |
对于需要自定义界面的更复杂用例,我们建议直接使用 ML Kit 条形码扫描 API。
如果您有疑问、想要提交 bug 或需要帮助,请访问 ML Kit 社区页面。
准备工作
为了让您的应用做好准备,请完成以下部分中的步骤。
配置您的应用
在顶级
settings.gradle
文件的dependencyResolutionManagement
代码块下,添加 Google 的 Maven 制品库和 Maven 中央制品库:dependencyResolutionManagement { repositories { google() mavenCentral() } }
将
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' }
您可以将应用配置为在用户从 Play 商店安装应用时,让 Google Play 服务自动将扫描器模块下载到设备上。
<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode_ui"/> ... </application>
您还可以通过 Google Play 服务 ModuleInstallClient API 明确检查扫描器模块的可用性并请求下载。
如果您未启用安装时模块下载或请求显式下载,并且扫描器模块尚未针对其他用例安装,则 Google Play 服务会在首次使用扫描器模块时下载该模块。
扫描二维码
请实现以下步骤来扫描条形码。
可选:配置代码扫描器。
如果您知道自己要读取哪些格式的条形码,可以将条形码检测器配置为仅检测这些格式,从而加快条形码检测器的速度。例如,如需仅检测 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();
获取
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);
通过调用
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 });
处理生成的
Barcode
。Kotlin
val rawValue: String? = barcode.rawValue
Java
String rawValue = barcode.getRawValue();