有奇怪的情况。我拿了standard google sample camera2API
。
我需要闪光灯永久工作,无论外界光线如何。
为了实现它,我改变了一行代码:
private void setAutoFlash(CaptureRequest.Builder requestBuilder) {
if (mFlashSupported) {
// requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
}
}
CONTROL_AE_MODE_ON_AUTO_FLASH
我已将其更改为CONTROL_AE_MODE_ON_ALWAYS_FLASH
。
我遇到问题,当我点击拍照按钮时,相机闪烁就是这样。应用程序进入堆栈......
我做错了什么?
编辑
我明白了:
我在三个不同的设备Meizu MX5
,Samsung S5
和Samsung S6
上试用了闪存。
其中两个Meizu MX5
,Samsung S5
正常使用上面的代码,app不会在堆栈中驱动。
Samsung S6
出现问题,但是......
方法setAutoFlash()
在代码中在不同的地方调用3次
captureStillPicture()
unlockFocus()
onConfigured()
如果我在setAutoFlash()
中captureStillPicture()
禁用Samsung S6
,它就会停止堆叠并且Flash开始有效,但如果我尝试Meizu MX5
的这种方法,{{ 1}}闪光灯不起作用......
答案 0 :(得分:0)
最终我找到了解决方案
正如我所说的方法
protected final void setAutoFlash(CaptureRequest.Builder requestBuilder) {
if (isFlashSupported) {
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
}
}
在代码中的三个不同位置调用。
captureStillPicture()
unlockFocus()
onConfigured()
所以我在每个方法中在本地实现了这一行requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
。
最后我得到了:
unlockFocus()
- >
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
onConfigured()
- >
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
并且此方法保持自动设置
captureStillPicture()
- >
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
但我不知道为什么会遇到这样的问题...如果有人知道原因,请告诉我。