java - 是否有可能在三星手机上激活前置摄像头闪光灯?
问题描述
我目前正在尝试激活三星 Galaxy A6 上的内置前置手电筒,但该设备提供的信息类似于没有内置前置闪光灯。
我已经尝试过不同的方法,可以通过搜索激活闪光灯找到。
首先尝试获取supportedFlashModes,然后使用setParameters (API < 23) 激活flash。但只是前置摄像头的 getParameters() 不会返回内置前置闪光灯的任何信息。对于该应用程序,似乎没有可用的前置闪光灯。
然后我尝试使用 API >= 23 中引入的 Camera2 API,并且出现了同样的问题。获取相机特征然后检查 FLASH_INFO 是否可用只会导致返回 false。还尝试使用 setTorchMode(FRONT_CAMERA, true) 仅激活闪存单元会引发异常,提示:没有可用的闪存单元。
我目前只有三星 Galaxy A6 作为内置前置闪光灯的测试设备。相同的代码适用于后(后)摄像头,没有任何问题。
广告 1)
try {
Camera camera;
camera = Camera.open(cameraId);
if (camera == null) {
return false;
}
Camera.Parameters parameters = camera.getParameters();
if (parameters.getFlashMode() == null) {
camera.release();
return false;
}
...
它只是在此时退出,因为 .getFlashMode() 为前置摄像头返回 null。下一步是检查supportedFlashModes,然后调用Camera的setParamater。
广告 2)
try {
String camID = null;
for(String cameraID : mCameraManager.getCameraIdList()) {
CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics(cameraID);
int orientation = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);
if (orientation == CameraCharacteristics.LENS_FACING_FRONT) {
if(cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)) {
camID = cameraID;
}
}
if(camID != null) {
mCameraManager.setTorchMode(camID, true);
}
} catch (Exception exc) {
...
}
这些只是简单地激活前置闪光灯的片段,但这两种方法的作用就像没有内置前置闪光灯的硬件响应。
解决方案
经过研究,似乎一些手机制造商正在使用私有 API 来控制硬件。尤其是三星和华为正在利用这一点。设备上的主要相机应用程序主要由该 API 控制,Frontflash 可以按预期使用。但即使是像 Instagram 和 Snapchat 这样的大型相机应用程序也无法摆脱这一点,也无法激活 Frontflash。
出于自己的目的,硬件只是不提供在某些设备上激活 Frontflash 的任何功能,它的反应就像没有内置的 frontflash 一样。目前还没有解决这个问题的方法。
现有的变通方法是对屏幕进行白化以照亮手机前面的环境。
推荐阅读
- javascript - React Native - 导出功能组件的访问属性
- python - 使用 Python Selenium 从网页中提取页码
- javascript - 从数组创建新的 JSON 字符串
- python - model.add(tf.keras.layers.Lambda(lambda x: x * 200)) 的含义
- azure - 我们如何使用 Azure Service Operators 创建和管理 Azure Keyvault Secrets?
- python - 为什么用 numpy.mean(A, axis=1)[0] 计算平均值与用 numpy.mean(A[0,:]) 计算平均值不同?
- elasticsearch - 无法使用 Filebeat 从客户端连接到 Logstash 服务器
- reactjs - 在 react js 中搜索并重定向到 id
- c++ - 创建发布者 ROS2 中的分配器
- json - 我想在 Python 中的对象列表中按属性查找对象的最小元素