cameraview
cameraview copied to clipboard
XiaoMi MI3 os:Android4.4.4 app crashes , when switch front camera。
crash happens when setFlashInternal().
/** * @return {@code true} if {@link #mCameraParameters} was modified. */ private boolean setFlashInternal(int flash) { if (isCameraOpened()) { List<String> modes = mCameraParameters.getSupportedFlashModes(); String mode = FLASH_MODES.get(flash); if (modes != null && modes.contains(mode)) { mCameraParameters.setFlashMode(mode); mFlash = flash; return true; } String currentMode = FLASH_MODES.get(mFlash); if (modes == null || !modes.contains(currentMode)) { mCameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); mFlash = Constants.FLASH_OFF; return true; } return false; } else { mFlash = flash; return false; } }
加我qq群:490113234 ,细聊,他们代码里面在启动相机的时候调用了chooseCameraIdByFacing这个方法,不论你怎么设置前置摄像头都不行,除非你单独调用cameramanager.openCamera,(注意):chooseCameraIdByFacing这个方法简直恶心,你可以把里面改造下,我就是改造完之后,才能用,切换前置没什么问题了。我其实自己做了设置前置后置的标志,然后在里面动态设置。
private boolean setFlashInternal(int flash) { if (isCameraOpened()) { List<String> modes = mCameraParameters.getSupportedFlashModes(); //flash mode setting is not supported if (modes == null) { mFlash = flash; return false; }
String mode = FLASH_MODES.get(flash);
if (modes != null && modes.contains(mode)) {
mCameraParameters.setFlashMode(mode);
mFlash = flash;
return true;
}
String currentMode = FLASH_MODES.get(mFlash);
if (!modes.contains(currentMode)) {
mCameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mFlash = Constants.FLASH_OFF;
return true;
}
return false;
} else {
mFlash = flash;
return false;
}
}
motify this function can fix it!