最近开发一个具有二维码扫描功能的应用,开发过程中相当愉快,本以为完成的很漂亮,师父会给我一个大大的赞,结果bug铺天盖地而来,其中最要命的就是Camera
的问题,我使用的是系统提供的Camera
,但是设备上有一个拍照的快捷按键,师父在相机预览界面点击了这个拍照的快捷物理键,然后悲剧就发生了,在预览界面按下拍照键时程序崩掉了,更为郁闷的是每次设备重启第一次按拍照键才会挂,后面点就没有反应了(可以是因为我程序里面写了try...catch
),但即使是这样的崩溃,依然让我焦头烂额,不知如何应对。
和大部分人解决问题的第一步一样,我在程序中打了好多个Log,对程序调试观察,结果我自己打的Log没有一条与异常退出有关的,大写的懵逼,终于磨叽了好久,在Log中看到了这样的输出:
Camera server died!
ICamera died!
嗯,感觉与预览界面崩溃有很大的关系,不过在网上搜索终不得解,只好硬着头皮看起了Sdk,发现Android提供了一个接口,Camera.ErrorCallback
,有一个方法onError(int error, Camera camera)
,其中有两个error code
:CAMERA_ERROR_UNKNOWN
和CAMERA_ERROR_SERVER_DIED
,没错,这里的CAMERA_ERROR_SERVER_DIED
就是Log中的Camera server died!
,所以我就想重写这个onError方法,针对对应的error进行处理。
Camera.ErrorCallback callback = new Camera.ErrorCallback() {
@Override
public void onError(int error, Camera camera) {
switch (error) {
case Camera.CAMERA_ERROR_SERVER_DIED:
Log.d("cwxin", "to do something");
break;
case Camera.CAMERA_ERROR_UNKNOWN:
Log.d("cwxin", "to do something");
break;
}
}
};
然后使用setErrorCallback(ErrorCallback)
方法调用就可以了。和想象中的一样,问题迎刃而解,记下来供大家参考,如有不正确的地方还请指出。
— edit by cwxin