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

本文介绍了解决Android应用程序中Camera服务频繁启动和停止的问题。通过在Surface销毁时正确释放Camera资源,确保了程序能够稳定运行并避免了因资源未释放导致的失败连接错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做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.youkuaiyun.com/yinyuan1987/article/details/6969225

http://blog.youkuaiyun.com/wwdzwjsw4106/article/details/7032281

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值