背景情况
使用Camera2 Api 直接报错
报错如下:
java.lang.IllegalArgumentException: Surface was abandoned
at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:89)
at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:260)
at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:145)
at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:520)
at com.example.fragment.Camera2Fragment$1.onOpened(Camera2Fragment.java:99)
at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:149)
原因及解决方法
SurfaceView 还没有创建成功,或者已经被销毁了,我这里的情况是还没有创建成功,那么需要在SurfaceView 创建成功的回调里,去初始化相机。
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
//一定要先确定surfaceView的大小 然后开启摄像头 不然就会出现拉伸
//todo 这里要动态的获取大小
mSurfaceView.setAspectRatio(1920, 1080);
view.post(()->initCamera());
// initCamera();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});