使用 camera2 API 检查可用的前置闪光灯

Posted

技术标签:

【中文标题】使用 camera2 API 检查可用的前置闪光灯【英文标题】:Check front flash available using camera2 API 【发布时间】:2018-08-31 19:34:06 【问题描述】:

我正在三星 J7 Pro 上测试我的相机应用程序,它有 前置闪光灯(真正的硬件 LED 闪光灯)。当我使用已弃用的 Camera API 检查 前置闪光灯 时:

List<String> supportFlashModes = defaultParameters.getSupportedFlashModes();
boolean isSupportedFlashMode = (supportFlashModes != null && supportFlashModes.contains(Camera.Parameters.FLASH_MODE_ON));

它工作正常,支持的闪光灯模式为前置摄像头返回 4 个值(on、off、auto_flash、always_flash)。

但是当我使用新的Camera2 API 进行检查时:

Boolean b = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
boolean isSupportedFlashMode = b != null ? b : false;

isSupportedFlashMode 总是返回false 用于前置摄像头。如果我使用以下方法检查支持的闪光模式:

characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES);

它也只返回 2 个值(ae_on、ae_off)。

有谁知道如何解决这个问题?请注意,我只是想检查设备的前置闪光灯是否可用。谢谢。

更新

这些方法在我的 Q-Mobile 设备(也有真正的 LED 前置闪光灯)上运行良好,但在三星 J7 Pro 上仍然无法运行。不知道为什么?

【问题讨论】:

我正在寻找J7设备来回答^^ @AlexCohn 我已经准备好尝试使用他们的三星 Galaxy SDK,但它建立在 camera2 之上,也不适用于我的 J7 pro。今晚我会尝试借另一个J7 pro测试一下。 这个前置摄像头是CameraCharacteristics.get(INFO_SUPPORTED_HARDWARE_LEVEL) == INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY? @AlexCohn 不,我已经为具有硬件支持级别 == LEGACY 的设备禁用了 camera2。 :( 另一个问题:当你询问camera2是否有前置闪光灯时,你得到了错误的答案;但是你能通过camera2操纵这个闪光灯吗?或者您必须简单地将 J7Pro 列入假装拥有 camera2 但需要旧的 Camera API 才能可靠工作的设备的黑名单? 【参考方案1】:

这似乎是与设备相关的问题。我公司使用 camera2 API 的应用程序也面临同样的问题。

我已经尝试用一个简单的示例和OpenCamera 对其进行测试,但它们都没有奏效。然后我决定把这个bug一直保留到现在,因为有前置闪光灯的设备数量很少,而且大部分都可以正常工作。

【讨论】:

这也发生在另一台 J7 Pro 设备上(我从朋友那里借来的)。所以可能是设备问题:(

以上是关于使用 camera2 API 检查可用的前置闪光灯的主要内容,如果未能解决你的问题,请参考以下文章

如何检查光量? [复制]

EGL 错误:0x3003,相机设备遇到严重错误(Camera2 Api)

Android Camera2前置摄像头

Camera2 API 无法关闭 TORCH 模式

相机 2 API 视频录制 - 自动闪光不工作

如何检查设备是不是有分别用于前置和后置摄像头的闪光灯?