Android CameraX检索摄像机配置文件参数时出错

Android CameraX检索摄像机配置文件参数时出错,android,android-camera,androidx,android-camerax,Android,Android Camera,Androidx,Android Camerax,我正在迁移到cameraX,遇到了一个例外 androidx.camera.core.InitializationException: java.lang.RuntimeException: Error retrieving camcorder profile params 错误日志声明调用时引发此错误 cameraProvider = cameraProviderFuture.get() 我无法在任何设备上重现此错误 我在这里初始化相机: private fun i

我正在迁移到cameraX,遇到了一个例外

androidx.camera.core.InitializationException: java.lang.RuntimeException: Error retrieving camcorder profile params
错误日志声明调用时引发此错误

            cameraProvider = cameraProviderFuture.get()
我无法在任何设备上重现此错误

我在这里初始化相机:

private fun initCameraProvider() {
    val cameraProviderFuture = ProcessCameraProvider.getInstance(this) //Error is thrown here
    cameraProviderFuture.addListener(Runnable {
        cameraProvider = cameraProviderFuture.get()
        val metrics = DisplayMetrics().also {
            previewView?.display?.getRealMetrics(it) 
        }
        val screenAspectRatio = ImageUtils.aspectRatio(metrics.widthPixels, metrics.heightPixels)
        val rotation = previewView?.display?.rotation ?: 0

        preview = Preview.Builder()
                .setTargetAspectRatio(screenAspectRatio)
                .setTargetRotation(rotation)
                .build()
        analyzer = BarcodeAnalyzer(previewView, overlay) { onSuccess(it) }
        val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

        imageAnalyzer = ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .setTargetAspectRatio(screenAspectRatio)
                .build()
                .also {
                    it.setAnalyzer(cameraExecutor, analyzer)
                }


        val useCaseGroup = UseCaseGroup.Builder()
                .addUseCase(preview)
                .addUseCase(imageAnalyzer)
                .build()
        try {
            cameraProvider?.unbindAll()
            preview.setSurfaceProvider(previewView?.surfaceProvider)
            camera = cameraProvider?.bindToLifecycle(this, cameraSelector, useCaseGroup)
        } catch (exc: Exception) {
            Log.e(TAG, "Use case binding failed", exc)
        }


    }, ContextCompat.getMainExecutor(this))
}

我在三星s20+和note 10+上使用camerax版本1.1.0-alpha01也遇到了同样的问题。尝试降级到1.0.0-beta11。

更换摄像机选择器。 看一看这个

并按如下方式更改版本:

def camerax_version = "1.0.0-rc01"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation 'androidx.camera:camera-view:1.0.0-alpha20'
implementation 'androidx.camera:camera-extensions:1.0.0-alpha20'
更新:(2021年3月24日-年月日)

该错误已在CameraX和中修复。 只需将依赖项更新到此版本或更高版本


更新:(2021年3月22日-年月日)

不久将发布一个新的CameraX版本来解决此问题,同时您可以应用此解决方法:

// CameraX core library
def camerax_version = '1.0.0-rc03'
implementation("androidx.camera:camera-core") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}

// CameraX Camera2 extensions
implementation("androidx.camera:camera-camera2") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}

// CameraX Lifecycle library
implementation("androidx.camera:camera-lifecycle") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}
implementation "androidx.camera:camera-extensions:1.0.0-alpha22"
implementation 'androidx.camera:camera-view:1.0.0-alpha22'
如上所述


目前,CameraX中存在影响(至少)三星S20+和Galaxy Note 10的缺陷+


这里是更新的问题链接:

我在Note 10+上也遇到了同样的崩溃,CameraX 1.0.0-rc03(还没有尝试过1.0.0-beta11)1.0.0-beta11是我解决方案的最新稳定版本,因此,我将坚持一段时间。有趣的是,这两种设备都没有根据此来源进行测试。我已在我的答案中添加了提供的解决方法,请尝试一下,看看它是否适合您
// CameraX core library
def camerax_version = '1.0.0-rc03'
implementation("androidx.camera:camera-core") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}

// CameraX Camera2 extensions
implementation("androidx.camera:camera-camera2") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}

// CameraX Lifecycle library
implementation("androidx.camera:camera-lifecycle") {
    version {
        strictly "$camerax_version"
    }
    because "Force use 1.0.0-rc03"
}
implementation "androidx.camera:camera-extensions:1.0.0-alpha22"
implementation 'androidx.camera:camera-view:1.0.0-alpha22'