gpt4 book ai didi

android-camera - Android 摄像头和 SurfaceView : Correct way to release

转载 作者:行者123 更新时间:2023-12-01 12:42:25 26 4
gpt4 key购买 nike

我想知道编写 SurfaceView 的 surfaceDestroyed 方法和 surfaceCreated 方法以及使用相机的 Activity 的 onPause 和 onResume 方法的最佳实践是什么?有几个帖子,但似乎没有一个有帮助。

代码如下:

表面创建

public void surfaceCreated(SurfaceHolder holder) {
try {
Log.d(TAG,"Surface Created");
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}

表面破坏

public void surfaceDestroyed(SurfaceHolder holder) {
this.getHolder().removeCallback(this);
mCamera.stopPreview();
mCamera.release();
}

恢复时的事件

protected void onResume() {
super.onResume();
mCamera.setPreviewCallback(null);
Log.d(TAG,"onResume Called");
if (mCamera==null){
mCamera=getCameraInstance();
}
initializeCamera(mCamera);
}

事件暂停

protected void onPause() {
super.onPause();
Log.d(TAG,"onPause Called");
if(mCamera!=null){
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mPreview.getHolder().removeCallback(mPreview);
preview.removeView(mPreview);
mCamera.release();
mCamera = null;
}
}

在 initializeCamera 中,我执行以下操作:

private void initializeCamera(Camera mCamera) {
mPreview = new InternalCameraPreview(this, mCamera);
preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);

}

使用此设置,我在运行应用程序时收到错误消息 Method Called Before Release()。我哪里错了?

最佳答案

应该是这样的:

@Override
public void onPause() {
super.onPause();

if (mCamera != null){
// mCamera.setPreviewCallback(null);
mPreview.getHolder().removeCallback(mPreview);
releaseMediaRecorder();
mCamera.release(); // release the camera for other applications
mCamera = null;

}
}

@Override
public void onResume() {
super.onResume();
if (mCamera == null) {
mCamera=getCameraInstance();
mPreview = new CameraPreview(this.getActivity(), mCamera);
preview.addView(mPreview);
}
}

surfaceDestroyed 中不需要任何东西

关于android-camera - Android 摄像头和 SurfaceView : Correct way to release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23079981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com