相机预览视图产生黑屏

问题描述 投票:0回答:1

这是我的代码:

@Composable
fun MyCameraPreview() {
    val lifecycleOwner = LocalLifecycleOwner.current
    AndroidView(factory = { context ->
        val previewView = PreviewView(context).apply {
            scaleType = PreviewView.ScaleType.FILL_CENTER
            layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
            implementationMode = PreviewView.ImplementationMode.COMPATIBLE
        }

        ProcessCameraProvider.getInstance(context).apply {
            addListener({
                val cameraProvider = this.get()
                val preview = androidx.camera.core.Preview.Builder().build().apply {
                    setSurfaceProvider(previewView.surfaceProvider)
                }

                try {
                    cameraProvider.unbindAll()
                    cameraProvider.bindToLifecycle(lifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, preview)
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }, ContextCompat.getMainExecutor(context))
        }

        previewView
    })
}

我摘自这个答案

我看到的只是黑屏。在清单中我请求了这些权限:

<uses-feature android:name="android.hardware.camera.any" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

(我还需要录音权限吗?我对录音不感兴趣。)

我还有什么遗漏的吗?如何让 PreviewView 真正显示来自相机的内容?

哦,日志里有这个错误:

尝试重新打开相机 10000 毫秒,但未成功。

android android-jetpack-compose android-camera
1个回答
0
投票

事实证明,使用相机必须明确请求许可。仅将其放在清单中是不够的。

归根结底,这可能只是:

    registerForActivityResult(ActivityResultContracts.RequestPermission()) { permission ->
        Log.d("-- CAMERA PERMISSION --", permission.toString())
    }.launch(Manifest.permission.CAMERA)
    

哦,不,我似乎不需要录制音频权限。

© www.soinside.com 2019 - 2024. All rights reserved.