使用ML Kit扫码时部分设备出现黑屏(QR扫描UI显示但相机失效)
Google Code Scanner API 相机黑屏问题(跨设备运行不一致)
我尝试用Google Code Scanner API实现条码扫描器,按要求配置了代码和项目,但运行时出现异常:扫码UI能显示,但相机画面是黑屏。更奇怪的是,应用在一台设备上能正常运行,另一台设备却出现这个问题。
我的相关代码与配置:
MainActivity.kt
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val options = GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC) .build() val scanner = GmsBarcodeScanning.getClient(this, options) scanner.startScan() .addOnSuccessListener { barcode -> val rawValue: String? = barcode.rawValue } .addOnCanceledListener { // Task canceled } .addOnFailureListener { e -> // Task failed with an exception } } }
settings.gradle
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } }
build.gradle(依赖部分)
implementation 'com.google.android.gms:play-services-code-scanner:16.0.0'
AndroidManifest.xml(meta-data配置)
<meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode_ui"/>
可能的原因及解决方向:
- 相机权限未正确授予:检查故障设备的应用权限设置,确认相机权限已开启。Android 6.0及以上需要动态权限,虽然API可能自动请求,但部分设备的权限弹窗可能被忽略或拦截,手动去系统设置里开启权限试试。
- Google Play服务版本不兼容:故障设备上的Google Play服务版本过低,API的扫码功能依赖特定版本的Play服务。打开Google Play商店,将Google Play服务更新至最新版本后重试。
- 设备系统版本或硬件限制:
- 确认故障设备的Android版本不低于API要求的最低版本(Android 5.0),旧系统可能存在兼容问题。
- 设备相机硬件故障或被其他应用占用,重启设备后再测试扫码功能。
- 依赖版本过旧:当前使用的
play-services-code-scanner:16.0.0不是最新稳定版,尝试升级到最新版本,旧版本可能存在特定设备的兼容bug。 - Manifest配置位置错误:确认
<meta-data>标签是放在<application>标签内部,位置错误会导致依赖的扫码UI组件无法正常加载。
内容的提问来源于stack exchange,提问作者Real Noob
相关产品推荐
相关产品推荐

