使用 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 检查可用的前置闪光灯的主要内容,如果未能解决你的问题,请参考以下文章