Java 为什么在试图将SurfaceView与摄像头关联时抛出“UnsupportedOperationException”?
我想使用Surface类显示相机拍摄的内容:Java 为什么在试图将SurfaceView与摄像头关联时抛出“UnsupportedOperationException”?,java,android,android-camera,surface,android-camera2,Java,Android,Android Camera,Surface,Android Camera2,我想使用Surface类显示相机拍摄的内容: SurfaceView view = (SurfaceView) findViewById(R.id.camera_view); Surface appSurface = view.getHolder().getSurface(); 我将曲面对象传递到CameraManager API: CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERV
SurfaceView view = (SurfaceView) findViewById(R.id.camera_view);
Surface appSurface = view.getHolder().getSurface();
我将曲面对象传递到CameraManager API:
CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE);
manager.openCamera(
manager.getCameraIdList()[0],
new CameraDevice.StateCallback() {
@Override
public void onOpened(CameraDevice camera) {
// Why this line throws an exception?
camera.createCaptureSession(
Collections.singletonList(appSurface),
new CameraCaptureSession.StateCallback() {...},
null);
}
// other @Override methods
...
},
new Handler(getMainLooper())
);
并接收以下异常:
FATAL EXCEPTION: main
Process: com.google.android.apps.internal.smartcamera.tagger, PID: 8563
java.lang.UnsupportedOperationException: Unknown error -22
at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:77)
at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize(LegacyCameraDevice.java:583)
at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:68)
似乎SurfaceUtils类(这是一段本机c代码)无法正确读取表面大小为什么?尝试将此添加到Manafiest.xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
曲面是指向其获取源的弱指针 您的ImageReader超出范围,垃圾被收集,相机设备运行到废弃的表面,并抛出异常。时间会有点随机,这就是为什么你不总是看到这一点
将您的图像阅读器永久性地存储在某个位置(您无论如何都必须使用它从中检索图像)。我有它们,但这并不能解决问题。我感谢您的评论。然而,将
ImageReader
对象设置为全局变量并没有帮助。在我自己做了更多的调试之后,我意识到ImageReader根本不是问题所在(我修改了问题以反映这一点)。问题在于,出于某种原因,从.xml文件获得的SurfaceView与CameraManager类不一致。运行应用程序时获得完整的logcat输出会很有帮助——在故障点,日志记录可能比异常记录多一点。从XML布局的SurfaceView在这里不起作用应该没有理由。你找到解决方案了吗?是的,我忘记了解决方案,因为它不再适用于我。如果有人愿意,我可以结束这个问题。