最近在搞SD卡的热插拔功能,发现有些设备拔掉SD卡后,视频的预览画面会卡死,大概就是Camera service died;CameraFramework: Error 100这些错误,日志如下所示:
02-22 11:20:26.293 2353-2371/com.example.reach.reachlive D/Camera-JNI: Out of buffers, clearing callback!
02-22 11:20:26.295 2353-2353/com.example.reach.reachlive I/CameraFramework: handleMessage: 16
02-22 11:20:26.295 2353-2353/com.example.reach.reachlive D/Camera-JNI: Adding callback buffer to queue, 1 total
02-22 11:20:26.324 2353-2721/com.example.reach.reachlive W/MediaMetadataRetriever: MediaMetadataRetriever server died!
02-22 11:20:26.324 2353-2721/com.example.reach.reachlive W/CameraBase: Camera service died!
02-22 11:20:26.324 2353-2721/com.example.reach.reachlive W/CameraBase: mediaserver's remote binder Camera object died
02-22 11:20:26.325 2353-2353/com.example.reach.reachlive I/CameraFramework: handleMessage: 1
02-22 11:20:26.325 2353-2353/com.example.reach.reachlive E/CameraFramework: Error 100
解决方法也很简单,只要在Camera初始化后,然后添加报错的回调监听:
mCamera.setErrorCallback(callback);
然后在回调里重新将Camera初始化即可,代码如下:
Camera.ErrorCallback callback = new Camera.ErrorCallback() {
@Override
public void onError(int error, Camera camera) {
switch (error) {
case Camera.CAMERA_ERROR_SERVER_DIED:
Log.e("error", "Camera.CAMERA_ERROR_SERVER_DIED");
//这里重新初始化Camera即可
break;
case Camera.CAMERA_ERROR_UNKNOWN:
Log.e("error", "Camera.CAMERA_ERROR_UNKNOWN");
break;
}
}
};