某些设备上的 CameraX 黑屏预览

CameraX black screen preview on some devices

我正在使用 camerax 在我的 android 应用程序中捕捉图像。 一切对我来说都很好,但一些用户在使用 camerax 时报告黑色预览屏幕 activity。

但是当用户从最近应用程序打开应用程序时,预览似乎有效。 所以,我认为问题可能出在生命周期绑定上。

我正在使用

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

            }
        })
    }

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