【发布时间】:2015-05-29 08:06:10
【问题描述】:
当我的应用程序打开并按下电源Button 并重新打开平板电脑时,Camera 挂起。我再次尝试在onResume() 方法上设置 SurfaceView 摄像头,但无法解决问题并尝试启动(camera1.startpreview()),但我仍然面临同样的问题。
我的 Surface View 的摄像头代码是:
SurfaceView cameraPreview1;
SurfaceHolder previewHolder1;
public static Camera camera2;
boolean inPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inPreview = false;
cameraPreview1 = (SurfaceView)findViewById(R.id.cameraPreview1);
previewHolder1 = cameraPreview1.getHolder();
previewHolder1.addCallback(surfaceCallback);
previewHolder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void onResume() {
super.onResume();
camera2=Camera.open(1);
mPicture1 = getPictureCallback();
}
@Override
public void onPause() {
super.onPause();
//when on Pause, release camera in order to be used from other applications
releaseCamera();
}
private void releaseCamera() {
// stop and release camera
if (camera2 != null) {
camera2.release();
camera2 = null;
}
}
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
try {
camera2.setPreviewDisplay(previewHolder1);
}
catch (Throwable t) {
Log.e(TAG, "Exception in setPreviewDisplay()", t);
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters parameters=camera2.getParameters();
Camera.Size size=getBestPreviewSize(width, height, parameters);
if (size!=null) {
parameters.setPreviewSize(size.width, size.height);
camera2.setParameters(parameters);
camera2.startPreview();
inPreview=true;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// not used
}
【问题讨论】: