Android屏幕背光调整机制

2024-01-07 09:38

本文主要是介绍Android屏幕背光调整机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/a345017062/article/details/6420239


扩展一个硬件(比如LED、蓝牙、传感器等),至少需要硬件、驱动、驱动交互模块。至于系统的层面如何把系统库加入自己的体系里面去,就是操作系统自己的事了。这里分析一下以背光调整为例Android。

 

源码在这里:http://code.google.com/p/flying-on-android/

 

 

要调整背光,第一步是搜索并加载驱动交互模块(一个.so库),然后打开设备。看一下这个函数:

void openDevice() {  hw_module_t* module;  int err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID,  (hw_module_t const**) &module);  assert(!err);  hw_device_t* device;  err = module->methods->open(module, LIGHT_ID_BACKLIGHT, &device);  assert(!err);  light = (light_device_t*) device;  }  

 

 

方法中的hw_get_module函数来自libhardware库,它会根据要加载的模块名字(这里是一个宏定义LIGHTS_HARDWARE_MODULE_ID,宏定义的值是"backlight"),去搜索lights.xxx.so,找到之后把这个.so加载到内存中,并把其中包含的模块信息填充进hw_module_t结构体。

 

Android中与传感器、LED、GPS、ALSA、GRALLOC等硬件交互的.so库都在/system/lib/hw目录下面,搜索是在这个目录下面进行的。lights.xxx.so中的xxx一般代表板子的型号,依次取"ro.hardware","ro.product.board","ro.board.platform","ro.arch"这几个系统属性中的一个。比如,在msm7k平台就是lights.msm7k.so。如果搜索不到,最后就会尝试加载lights.default.so。

 

模块加载完毕后,再知道一个设备名字,就可以打开这个设备了。具体打开设备的代码是:

module->methods->open(module, LIGHT_ID_BACKLIGHT, &device);

 

这样,得到device句柄之后,我们就可以操作这个设备了。

 

Android在应用层中调整背光时只需要一个值,就是brightness,系统会把这个值转化成一个R、G、B值相同的颜色值。看下面的代码:


void setLight(int brightness) {  //亮度转化成RGB值,R、G、B的值始终相同。  int color = brightness & 0x000000ff;  color = 0xff000000 | (color << 16) | (color << 8) | color;  setLight(color, 0, 0, 0, 0);  }  


最后,把这个颜色值写入驱动:

void setLight(int colorARGB, int flashMode, int onMS, int offMS,  int brightnessMode) {  light_state_t state;  memset(&state, 0, sizeof(light_state_t));  state.color = colorARGB;  state.flashMode = flashMode;  state.flashOnMS = onMS;  state.flashOffMS = offMS;  state.brightnessMode = brightnessMode;  light->set_light(light, &state);  }  


 

至于set_light方法,可以看一下/hardware/msm7k/liblights/lights.c中的set_light_backlight方法,这个方法就是把一个颜色值写进了文件/sys/class/leds/lcd-backlight/brightness。一个简单的字符设备。

 



这篇关于Android屏幕背光调整机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579501

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja