You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Code Scanner(二维码扫描器)启动时黑屏问题求助

Google ML Kit Code Scanner启动后黑屏无日志的解决思路

针对启动扫描器后黑屏且无日志的问题,可按以下步骤逐一排查:

  • 确认相机权限配置
    ML Kit条码扫描依赖相机权限,先检查AndroidManifest.xml中是否已添加权限声明:

    <uses-permission android:name="android.permission.CAMERA" />
    

    同时在代码中主动校验权限状态,确保权限授予后再启动扫描:

    private const val REQUEST_CAMERA_PERMISSION = 1001
    
    // 在点击事件中添加权限校验
    binding.scanQR.setOnClickListener {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
            // 执行原扫描逻辑
            startBarcodeScan()
        } else {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA_PERMISSION)
        }
    }
    
    private fun startBarcodeScan() {
        val options = GmsBarcodeScannerOptions.Builder()
            .setBarcodeFormats(Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC)
            .build()
    
        GmsBarcodeScanning.getClient(this, options).startScan().addOnSuccessListener {
            model.onScanAddress(it.rawValue)?.let { address ->
                binding.address.setText(address)
            }
        }.addOnFailureListener {
            Timber.e(it)
        }
    }
    
  • 更新ML Kit依赖版本
    旧版本依赖可能存在兼容性问题,确保app/build.gradle中使用最新稳定版的条码扫描依赖:

    implementation 'com.google.mlkit:barcode-scanning:17.2.0' // 替换为当前最新版
    

    同时保证Google Play Services相关依赖版本匹配,避免版本冲突。

  • 排查设备相机基础功能
    先测试系统自带相机APP能否正常拍照预览,若系统相机也黑屏,说明是设备硬件或系统层面的问题;若系统相机正常,则问题集中在ML Kit的集成逻辑上。

  • 尝试自定义扫描界面替代内置界面
    内置的startScan()使用Google提供的默认UI,部分设备可能存在兼容性问题。可以改用自定义扫描界面,结合CameraX实现预览与条码分析:

    val options = GmsBarcodeScannerOptions.Builder()
        .setBarcodeFormats(Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC)
        .build()
    val scanner = BarcodeScanning.getClient(options)
    
    // 初始化CameraX图像分析器
    val imageAnalyzer = ImageAnalysis.Builder()
        .setTargetResolution(Size(1280, 720))
        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
        .build()
        .also {
            it.setExecutor(Executors.newSingleThreadExecutor()) { imageProxy ->
                val mediaImage = imageProxy.image ?: run {
                    imageProxy.close()
                    return@setExecutor
                }
                val inputImage = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
                scanner.process(inputImage)
                    .addOnSuccessListener { barcodes ->
                        barcodes.firstOrNull()?.rawValue?.let { value ->
                            model.onScanAddress(value)?.let { address ->
                                runOnUiThread { binding.address.setText(address) }
                            }
                        }
                    }
                    .addOnCompleteListener {
                        imageProxy.close()
                    }
            }
        }
    
    // 绑定CameraX预览与分析器(需在布局中添加PreviewView)
    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    cameraProviderFuture.addListener({
        val cameraProvider = cameraProviderFuture.get()
        val preview = Preview.Builder()
            .build()
            .also {
                it.setSurfaceProvider(binding.previewView.surfaceProvider)
            }
        try {
            cameraProvider.unbindAll()
            cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, preview, imageAnalyzer)
        } catch(exc: Exception) {
            Timber.e(exc)
        }
    }, ContextCompat.getMainExecutor(this))
    
  • 强制开启详细日志排查
    尝试启用ML Kit的 verbose 日志,捕捉潜在的隐藏错误:

    import com.google.mlkit.common.logging.Logging
    // 在Application或Activity的onCreate中添加
    Logging.setLogLevel(Logging.LogLevel.VERBOSE)
    

    同时用adb命令过滤ML Kit相关日志:

    adb logcat -s MLKitBarcodeScanning
    
  • 测试其他设备验证兼容性
    在不同设备(尤其是原生Android系统的设备)上测试,若仅当前设备出现问题,说明是设备定制ROM或硬件的兼容性问题,可考虑针对该设备做特殊适配。

内容的提问来源于stack exchange,提问作者tzegian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:43:27