Java onCreateSurface()方法具有空摄影机对象
在开发相机应用程序时,我遇到了一个错误,它第一次运行时就可以正常工作,并且只有在运行onStop方法后才会出现错误 我的逻辑是,摄影机对象将被启动,并且类的一个对象将处理摄影机的预览,然后摄影机对象将被发送到预览类 问题是,当它到达setCamera功能时,它似乎工作并设置相机,但当它到达onSurfaceCreated时,相机对象表示它为空 以下是我活动中的onResume方法: Activity.java onResume函数Java onCreateSurface()方法具有空摄影机对象,java,android,android-camera,Java,Android,Android Camera,在开发相机应用程序时,我遇到了一个错误,它第一次运行时就可以正常工作,并且只有在运行onStop方法后才会出现错误 我的逻辑是,摄影机对象将被启动,并且类的一个对象将处理摄影机的预览,然后摄影机对象将被发送到预览类 问题是,当它到达setCamera功能时,它似乎工作并设置相机,但当它到达onSurfaceCreated时,相机对象表示它为空 以下是我活动中的onResume方法: Activity.java onResume函数 if(camera == null){ camera =
if(camera == null){
camera = Camera.open();
camera.setDisplayOrientation(90);
camera.startPreview();
}
if(preview == null){
preview = new CameraPreview(this, camera_preview);
preview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
preview.setKeepScreenOn(true);
preview.setCamera(camera);
mainLayout.addView(preview);
}
暂停方法:
if(camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
if(preview != null){
mainLayout.removeView(preview);
preview.setCamera(null);
preview = null;
}
CameraPreview.java
建造师
CameraPreview(Context context, SurfaceView surfaceView){
super(context);
this.surfaceView = surfaceView;
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
}
设置摄像头功能:
public void setCamera(Camera temp_camera){
camera = temp_camera;
if(camera != null){
supportPreviewSizes = camera.getParameters().getSupportedPreviewSizes();
requestLayout();
Camera.Parameters params = camera.getParameters();
List<String> focusMode = params.getSupportedFocusModes();
params.setJpegQuality(10);
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
// If the camera supports auto focus implement it
if(focusMode.contains(Camera.Parameters.FOCUS_MODE_AUTO)){
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(params);
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
if(camera != null){
camera.setPreviewDisplay(holder);
}
}
catch (IOException ex){
ex.printStrackTrace();
}
}
你知道为什么surfaceCreated中的摄影机对象变为空吗
编辑
我发现真正的罪魁祸首不是一个空的摄像机对象,而是一个被调用的空列表。然而,当我意识到surfaceCreated被调用了两次之后,我发现了它,每次它关闭和打开时,它都会被再次调用,从而产生一种奇怪的行为,我不明白为什么会发生这种情况。您在代码中调用
surfaceCreated()
?camera
变量是否超出范围?surfaceCreated()它在mainLayout.addView(preview)之后调用。我不知道为什么会对其进行升级-我不是说这很卑鄙,而是说这很有帮助。你应该在你的帖子中提供一个,其他人可以用它来模拟/解决问题。现在,我不确定这篇帖子怎么不属于“为什么这段代码不能工作?”类别。请您查看MVCE链接,修改您的帖子,也许我们可以帮助您解决您遇到的“奇怪行为”。您在代码中调用surfaceCreated()
?camera
变量是否超出范围?surfaceCreated()它在mainLayout.addView(preview)之后调用。我不知道为什么会对其进行升级-我不是说这很卑鄙,而是说这很有帮助。你应该在你的帖子中提供一个,其他人可以用它来模拟/解决问题。现在,我不确定这篇帖子怎么不属于“为什么这段代码不能工作?”类别。请你看看MVCE链接,修改你的帖子,也许我们可以帮助你解决你所面临的“奇怪行为”。