android Camera里面的问题:fail to connect to Camera service

来源:互联网 发布:js indexof 第一个 编辑:程序博客网 时间:2024/06/06 01:30

做android的camera项目的时,程序第一次运行后,可以正确看到图像,后面再次运行就一直提示该错误:fail to connect to Camera service。只能重启手机后,才可以。查找资料,看到是因为程序关闭的时候没有正确关闭相机的摄像头,所以导致下次不能打开。基于此,就在activity的ondestory中关闭摄像头,但还是不行,最后看到贴子在surface的ondestory方法中再加上关闭方法,结果才能多次调试运行。附上关于这块的设置:

// 为surfaceHolder添加一个回调监听器
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {


Camera.Parameters mParameters = camera.getParameters();


List<Size> s = mParameters.getSupportedPreviewSizes();


mParameters.setPreviewSize(352, 288);
camera.setParameters(mParameters);


mParameters.setPreviewFpsRange(20, 30); // 每秒显示20~30帧
mParameters.setPictureFormat(ImageFormat.NV21); // 设置图片格式
mParameters.setPictureSize(screenWidth, screenHeight); // 设置照片的大小
// camera.setParameters(parameters); // android2.3.3以后不需要此行代码
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 通过SurfaceView显示取景画面
camera.setPreviewCallback(new StreamIt(ipname)); // 设置回调的类
camera.startPreview(); // 开始预览
camera.autoFocus(null); // 自动对焦
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
initCamera(); // 打开摄像头
}


@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 如果camera不为null ,释放摄像头
if (camera != null) {
// if (isPreview)
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera = null;
}
System.exit(0);
}
});


参考链接:http://blog.csdn.net/yinyuan1987/article/details/6969225

http://blog.csdn.net/wwdzwjsw4106/article/details/7032281

原创粉丝点击