拨打视频电话时取舍关闭摄像头弹出Phone报错java.lang.RuntimeException: Fail to get camera info 或 startPreview failed
java.lang.RuntimeException: Fail to get camera info
在展讯平台8810遇到过:拨打视频电话时选择关闭摄像头弹出Phone报错 的问题。
对InVideoCallScreen.java 中的 createCamera() 进行修改!!!
private void createCamera() {
//Add by kylin 2012.06.27
if(!isShowCarme){
mCamera = Camera.open(getCamerID());
}
if (mCamera != null && !isShowCarme) {
// If the activity is paused and resumed, camera device has been
// released and we need to open the camera.
try {
Camera.Parameters params = mCamera.getParameters();
params.setSensorRotation(getSensorRotation());
params.set("sensororientation", 1);
params.set("videodatatype", "1");
mCamera.setParameters(params);
Log.d(LOG_TAG, "createCamera(), mCamera: " + mCamera);
mCamera.unlock();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
isShowCarme = true;
}
//end
}
private void closeCamera() {
Log.v(LOG_TAG, "closeCamera");
mHandler.removeMessages(DELAYED_CREATE_CAMERA);
if (mCamera == null) {
Log.d(LOG_TAG, "already stopped.");
return;
}
mCamera.lock();
mCamera.release();
mCamera = null;
mPreviewing = false;
isShowCarme = false; //Add by kylin 2012.07.10
}
android camera .如果遇到 java.lang.RuntimeException: startPreview failed 。
一般Camera调用open 以及startPreview需要确保不两次调用,如果Camera.open(); 或者camera.startPreview();连续调用了多次,将可能会发生 java.lang.RuntimeException: startPreview failed;一般可以使用boolean 全局变量来记录当前camera的状态。来保证这一点。如下函数所示:
private void initCamera() {
if (!isView) {
camera = Camera.open();
}
if (camera != null && !isView) {
try {
Camera.Parameters myParameters = camera.getParameters();
myParameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(myParameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
isView = true;
}
}