为什么闪存驱动应用程序堆栈? CONTROL_AE_MODE_ON_ALWAYS_FLASH Camera2API

时间:2016-10-30 09:00:42

标签: android camera android-camera ip-camera camera-flash

有奇怪的情况。我拿了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 MX5Samsung S5Samsung S6上试用了闪存。

其中两个Meizu MX5Samsung S5正常使用上面的代码,app不会在堆栈中驱动。

Samsung S6出现问题,但是......

方法setAutoFlash()在代码中在不同的地方调用3次

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()
  4. 如果我在setAutoFlash()captureStillPicture()禁用Samsung S6,它就会停止堆叠并且Flash开始有效,但如果我尝试Meizu MX5的这种方法,{{ 1}}闪光灯不起作用......

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);
    }
}

在代码中的三个不同位置调用。

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()
  4. 所以我在每个方法中在本地实现了这一行requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

    最后我得到了:

    1. unlockFocus() - > mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
    2. onConfigured() - > mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
    3. 并且此方法保持自动设置

      1. captureStillPicture() - > captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
      2. 但我不知道为什么会遇到这样的问题...如果有人知道原因,请告诉我。