CameraX 在某些设备上预览出现黑屏

7

我正在使用Camerax在我的Android应用程序中捕获图像。对于我来说,一切都正常工作,但有些用户报告说使用Camerax活动时出现黑屏预览。

但是当用户从最近的应用程序中打开应用程序时,预览似乎可以正常工作。因此,我认为问题可能与生命周期绑定有关。

我正在使用:

implementation "androidx.camera:camera-camera2:1.0.0-beta08"

这是我的代码

    <androidx.camera.view.PreviewView
        android:id="@+id/viewFinder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />



     private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

        cameraProviderFuture.addListener({
            cameraProvider = cameraProviderFuture.get()

            val preview = Preview.Builder()
                    .build()
                    .also {
                        it.setSurfaceProvider(viewFinder.createSurfaceProvider())
                    }

            imageCapture = ImageCapture.Builder()
                    .build()

            val cameraSelector = CameraSelector.Builder()
                    .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                    .build()
            
            try {
                cameraProvider.unbindAll()
                cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture)

            } catch (exc: Exception) {
                Log.e(TAG, "Use case binding failed", exc)
            }

        }, ContextCompat.getMainExecutor(this))
    }


     private fun takePhoto() {
        val imageCapture = imageCapture ?: return

        val photoFile = File(
                getExternalFilesDir("scantmp"),
                SimpleDateFormat(FILENAME_FORMAT, Locale.US
                ).format(System.currentTimeMillis()) + ".png")

        val outputOptions = ImageCapture
                .OutputFileOptions
                .Builder(photoFile)
                .build()

        imageCapture.takePicture(
                outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback {
            override fun onError(exc: ImageCaptureException) {
                Log.e(TAG, "Photo capture failed: ${exc.message}", exc)
            }

            override fun onImageSaved(output: ImageCapture.OutputFileResults) {
                savedImageUri = Uri.fromFile(photoFile)
                flash.visibility = View.GONE
                closeCamera.visibility = View.GONE
                takeAgain.visibility = View.VISIBLE
                saveImage.visibility = View.VISIBLE
                imgCapture.visibility = View.INVISIBLE
                imageCaptured.setImageURI(Uri.fromFile(photoFile))
                imageCaptured.visibility = View.VISIBLE
                viewFinder.visibility = View.GONE

            }
        })
    }


你的设置看起来很好。你能贴出请求所需权限的代码吗(例如相机权限)? - Husayn Hakeem
相机权限已经在最小活动上被授予。 因此,权限没有问题。 - Akash Chaudhary
1个回答

2

以上问题在1.0.0-beta11更新中已得到解决。 尝试将您的库更新到最新版本以解决此问题。


当我设置camerax_version = '1.1.0'时,它会失败。 - Jeff Bootsholz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接