Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在试图将SurfaceView与摄像头关联时抛出“UnsupportedOperationException”?_Java_Android_Android Camera_Surface_Android Camera2 - Fatal编程技术网

Java 为什么在试图将SurfaceView与摄像头关联时抛出“UnsupportedOperationException”?

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

我想使用Surface类显示相机拍摄的内容:

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在这里不起作用应该没有理由。你找到解决方案了吗?是的,我忘记了解决方案,因为它不再适用于我。如果有人愿意,我可以结束这个问题。