Java camerax“;未绑定到有效的摄像头";Android 11上的imageCapture用例
我一直在犯错误 未绑定到有效的摄影机 尝试实现imageCapture用例时。在camerax教程之后,我将用Java实现该特性 预览用例正确绑定,我可以在启动活动时访问相机,但当我点击“拍照”按钮时,我得到以下错误:Java camerax“;未绑定到有效的摄像头";Android 11上的imageCapture用例,java,android,camera,android-camera,Java,Android,Camera,Android Camera,我一直在犯错误 未绑定到有效的摄影机 尝试实现imageCapture用例时。在camerax教程之后,我将用Java实现该特性 预览用例正确绑定,我可以在启动活动时访问相机,但当我点击“拍照”按钮时,我得到以下错误: Photo capture failed: ${exception.message} androidx.camera.core.ImageCaptureException: Not bound to a valid Camera [ImageCapture:android
Photo capture failed: ${exception.message}
androidx.camera.core.ImageCaptureException: Not bound to a valid Camera [ImageCapture:androidx.camera.core.ImageCapture-9aad1b57-8fb6-4a6e-b528-9347343369b6]
at androidx.camera.core.ImageCapture.lambda$sendImageCaptureRequest$6$ImageCapture(ImageCapture.java:825)
at androidx.camera.core.-$$Lambda$ImageCapture$2B91NcXQyr59NDscigcxsZb94mc.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
有人面临类似的问题吗?任何指针?要解决此问题,必须将用例的集合绑定到生命周期所有者
cameraProvider.bindToLifecycle(
this, cameraSelector, preview, imageCapture)
用例是什么:
用例提供了映射用例中参数集的功能
摄像机可用的参数的大小写。用例也将
将激活/非激活状态的信息传送给摄像机
首先,您必须在build.gradel中具有以下依赖项:
UseCase imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build();
ListenableFuture<ProcessCameraProvider> providerListenableFuture = ProcessCameraProvider.getInstance(this);
ProcessCameraProvider processCameraProvider = providerListenableFuture.get();
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture);
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(file).build()
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build()
val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(this)
val processCameraProvider = cameraProviderFuture.get()
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture)
现在,您可以使用以下方法进行绑定:
public androidx.camera.core.Camera bindToLifecycle(@NonNull @NotNull androidx.lifecycle.LifecycleOwner lifecycleOwner,
@NonNull @NotNull androidx.camera.core.CameraSelector cameraSelector,
@NonNull @NotNull androidx.camera.core.UseCase... useCases)
对于exmaple,我的主要活动中有以下代码:
对于java:
UseCase imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build();
ListenableFuture<ProcessCameraProvider> providerListenableFuture = ProcessCameraProvider.getInstance(this);
ProcessCameraProvider processCameraProvider = providerListenableFuture.get();
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture);
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(file).build()
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build()
val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(this)
val processCameraProvider = cameraProviderFuture.get()
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture)
UseCase-imageCapture=new-imageCapture.Builder()
.setCaptureMode(图像捕获.CAPTURE\u模式\u最大化质量)
.build();
ListenableFuture providerListenableFuture=ProcessCameraProvider.getInstance(此);
ProcessCameraProvider ProcessCameraProvider=providerListenableFuture.get();
processCameraProvider.bindToLifecycle(这个,CameraSelector.DEFAULT\u BACK\u CAMERA,imageCapture);
对于科特林:
UseCase imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build();
ListenableFuture<ProcessCameraProvider> providerListenableFuture = ProcessCameraProvider.getInstance(this);
ProcessCameraProvider processCameraProvider = providerListenableFuture.get();
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture);
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(file).build()
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build()
val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(this)
val processCameraProvider = cameraProviderFuture.get()
processCameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, imageCapture)
val outputFileOptions=ImageCapture.outputFileOptions.Builder(file.build)()
val imageCapture=imageCapture.Builder()
.setCaptureMode(图像捕获.CAPTURE\u模式\u最大化质量)
.build()
val cameraProviderFuture:ListenableFuture=ProcessCameraProvider.getInstance(此)
val processCameraProvider=cameraProviderFuture.get()
processCameraProvider.bindToLifecycle(此,CameraSelector.DEFAULT\u BACK\u CAMERA,imageCapture)
有关更多详细信息,请参阅官方文档中的CameraX版本查看此答案-谢谢@HB。我通过在takePhoto函数中包含bind语句来实现它。本教程中没有明确提到这一点。因此,对于学习本教程的任何人,除了在startCamera函数中生成bind语句外,请在takePhoto函数中包含类似的bind调用,附加imageCapture用例。请在回答中添加其他详细信息这也适用于VideoCapture