Android怎样绕开Camera打开手电筒的LED
Android原生系统没有提供手电筒的API,很多手电筒的apk都是通过打开camera然后调用Flash来打开LED。
这种传统的做法有很多弊端,首先通过camera打开手电筒,会增加因为camera出粗而导致手电筒异常的风险;其次,因为要先打开camera,然后打开Flash,因此会额外增加很多功耗。
因此理想的解决方法是,在HAL层和JNI层封装出手电筒的接口,上层应用直接调用手电筒的API打开LED。
在Android的HAL层和JNI层添加手电筒的接口,包含以下一些步骤:
1. 在HAL层添加Light的接口
a. 定义手电筒LED的文件节点路径:
char const * const TORCH_FILE = "/sys/class/leds/led:flash_torch/brightness";
b. 定义控制手电筒LED的接口:
static int set_light_torch(struct light_device_t* dev, struct light_state_t const* state)
{
int err = 0;
pthread_mutex_lock(&g_lock);
err = write_int(TORCH_FILE, state->color & 0xFF);
pthread_mutex_unlock(&g_lock);
return err;
}
c. 定义手电筒对应的Light ID:
在Lights.h中添加 #define LIGHT_ID_TORCH "torch"
d. 在open_lights函数里面添加如下代码:
else if (0 == strcmp(LIGHT_ID_TORCH, name))
set_light = set_light_torch;
2. 在JNI层添加相应的接口
a. 在com_android_server_LightsService.cpp文件的init_native( )函数中添加手电筒的Light结构体:
devices->lights[LIGHT_INDEX_TORCH] = get_device(module, LIGHT_ID_TORCH);
b. 在Light类型的enum变量中添加手电筒的类型索引
LIGHT_INDEX_TORCH = 8,
c. 在LightService.java文件中添加手电筒Light的Id
public static final int LIGHT_ID_TORCH = 8;
3. 在Java服务层添加LightServices的接口
a. 在PowerManagerService.java文件中添加相应的接口,具体如下:
在PowerManagerService的类定义中增加手电筒Light的对象
private LightsService.Light mTorchLight;
在systemReady( )接口中创建手电筒Light的实例
mTorchLight = mLightsService.getLight(LightsService.LIGHT_ID_TORCH);
在PowerManagerService的类定义中添加调用手电筒Light的接口
@Override // Binder call
public void setTorchLight(int brightness) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
final long ident = Binder.clearCallingIdentity();
try {
setTorchLightBrightness(brightness);
} finally {
Binder.restoreCallingIdentity(ident);
}
}
public void setTorchLightBrightness(int brightness) {
LightsService.Light light;
synchronized (mLock) {
if (!mSystemReady) {
return;
}
light = mTorchLight;
}
// Control light outside of lock.
light.setBrightness(brightness);
}
b. 在PowerManager.java文件里面定义供应用层调用的手电筒API:
public void setTorchBrightness(int brightness) {
try {
mService.setTorchLight(brightness);
} catch (RemoteException e) {
}
}
c. 在IPowerManager.aidl文件中添加手电筒的接口:
void setTorchLight(int brightness);
d. 在BridgePowerManager.java文件中添加接口:
@Override
public void setTorchLight(int arg0) throws RemoteException {
// pass for now.
}
至此,从HAL到JNI的所有接口都已经添加完毕,应用层可以通过LightService来获取手电筒的Light对象,然后对手电筒进行操作。
Android怎样绕开Camera打开手电筒的LED相关推荐
- Android 5.1 解决打开手电筒后,无法打开相机问题
直接贴代码,按照faq修改后,无法实现预期效果,稍微修改后即可实现 diff --git a/alps/frameworks/av/services/camera/libcameraservice/C ...
- 如何在Android中打开/关闭相机LED /手电筒
在本教程中,我们向您展示如何在Android中打开/关闭手机摄像头或手电筒. 查看代码段: 1.开启 camera = Camera.open();Parameters p = camera.getP ...
- android 打开手电筒 适配camera2
只是修改了一个bug,应用商店就提示使用了某某某家的sdk不让通过. 最后还是--唉,以后还能不能愉快地玩耍,头疼. 正文 在android 5.0+的版本以前的的camera API被废弃, 所以如 ...
- android 带手电筒的扫一扫(1 可以自动打开手电筒,2 可以自动对焦,增加识别率)
android 扫一扫 功能: 1 可以类似于摩拜单车的扫一扫,自动打开手电筒图标让我们打开手电筒. 2 可以自动聚焦 解释说明: 功能1 加上了手电筒的效果 说明 在项目中 CaptureActiv ...
- Android Camera 打开预览流程分析(一)--打开camera的SDK流程
Android系统应用场景中,Camera的使用场景变得越来越重要,在手机端不管是牌照美颜,还是拍小视频上传小视频平台.在其他领域,如车载,倒车视频,360全景影像也同样会用到Camera接口.那我们 ...
- [Android驱动] 高通 Q PNP Flash LED驱动 及上层调用的流程
直白的记录一下,翻译的文件来自kernel: kernel/documentation/devicetree/bindings/leds/leds-qpnp-flash.txt ----------- ...
- Android Studio 学习实例记录-手电筒
Android Studio 学习实例记录-手电筒 刚安装好Android Studio3.1.2,上网搜了一个实例进行实践学习,仅用这篇文章来记录学习过程 MainActivity.java的源码来 ...
- 安卓 授权打开手电筒
打开手电筒 大家好,我自己的项目是 写一个 扫一扫 ,同时开启 手电筒的功能,扫一扫 我用到了 Zxing ,然后呢 我网上找了手电筒的方法,加上之后 发现 额 不行 ,一直报这个错 android. ...
- nexus 5和三星Galaxy S4等中打开手电筒无效的解决方案
吐槽一下:好几天都被一个卡死的bug烦恼,一直以为是自己写的有问题,后来找到原因才发现是我们程序自己的bug.很无语啊,他们在网上随便找了一个卸载反馈的功能加到我们程序中来,没想到这个功能导致内存泄漏 ...
最新文章
- kepserver 三菱fx_#电工培训# #plc培训# PLC培训 学在智通 赢在职场【三菱plc吧】
- 《信息学奥赛一本通》高精除以高精,求它们的商和余数。
- 本地计算机端口流量,计算机和防火墙上的端口及其用途-101问题
- 终端乱码的终极解决方案
- centos 6.5 防火墙开放指定端口
- centos 安装git_在Centos8上安装Git的方法
- SQL Server字符串左匹配
- 设计模式(四)行为型模式
- yum安装Apache2.4
- tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
- android中jni的调用过程,Android 调用jni的过程简述
- JUnit5总体介绍
- 纯js油猴插件版GUI页面助手
- Windows10的电脑如何查找AppData文件夹
- 1|homework
- 1.5黄金白银最新行情走势分析预测,黄金实时操作建议
- 洛谷日报索引(2020、2019、2018)
- 几招就可轻松搞定证件照处理,还不快来码住!
- Caffe中的数据填充类Filler
- Python调用大华SDK:实现视频监控系统