问题:当我将场景模式设置为 时,当我调用方法SCENE_MODE_NIGHT
时,闪光灯无法设置为关闭。takePicture()
伪:
Camera mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK)
Camera.Parameters params = camera.getParameters();
//AUTO-FOCUS
List<String> focus = params.getSupportedFocusModes();
if (focus != null && focus.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
//AUTO NIGHT SCENE
List<String> scene = params.getSupportedSceneModes();
if (scene != null && scene.contains(Camera.Parameters.SCENE_MODE_NIGHT)){
params.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
}
//FLASH
List<String> flash = params.getSupportedFlashModes();
if(flash != null && flash.contains(Camera.Parameters.FLASH_MODE_OFF)) {
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
}
mCamera.setParameters(params);
mPreview = new CameraPreview(this, mCamera, params); //surfaceView (CameraPreview extends SurfaceView implements SurfaceHolder.Callback)
来电拍照:
if(params.isVideoSnapshotSupported()){//Some device not supported this mode
mCamera.takePicture(null, null, new Camera.PictureCallback(){
...
}
权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" /> <!--somewhere i find this strange permission, but still not working-->
Logcat 正确显示: params.getFlashMode()
: off,但 flash 被触发。
Logcat(Nexus 5)显示:I/mm-jpeg-intf: process_sensor_data: Flash value 1 flash mode 4 flash state 3
通话后mCamera.takePicture
。
当我评论行时:(params.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
或更改为Camera.Parameters.SCENE_MODE_AUTO
) flash 不会被触发。
Logcat(Nexus 5)显示:I/mm-jpeg-intf: process_sensor_data: Flash value 0 flash mode 0 flash state 2
通话后mCamera.takePicture
。
目标:使用这些参数:SCENE_MODE_NIGHT
,FLASH_MODE_OFF
一起。
使用:Android 相机 1 API。后置摄像头。
出现:Android 6,7,也可能是 Android 5。
测试:
- Nexus 5:不行。
- 华为荣耀4C:好的
可能是 Nexus 5“错误”,因为我尝试从 Google Play 打开相机应用程序,将场景设置为夜间,禁用闪光灯,但拍照时闪光灯仍然处于活动状态。