(一)Lights应用层

SystemUI——系统应用,其主要功能:状态栏信息显示、通知面板、截图/壁纸/屏保服务等;

代码:
packages/apps/Settings/src/com/android/settings/BrightnessPreference.java
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
  1. 1)当用户点击BrightnessPreference的时候,有BrightnessPreference做对应处理
  2. onclick() 发送一个显示亮度对话框的广播
  3. 2)对广播进行注册并处理,在BrightnessDialog中初始化拖动条等相关控件
  4. 3)对亮度的调节使用BrightnessController类

*************************BrightnessController************************

  • 获取设备的最大和最小亮度值、及亮度调节模式
  • 设置屏幕亮度
//获取IPowerManager对象mPower= IPowerManager.Stub.asInterface(ServiceManager.getService("power"));//设置屏幕亮度private void setBrightness(int brightness) {try {mPower.setTemporaryScreenBrightnessSettingOverride(brightness);} catch (RemoteException ex) {}}
  • 亮度值和亮度模式的读取和存储
setMode(int mode)   //设置亮度模式,0表示手动,1表示自动Settings.System.putIntForUser()  //通过此接口来存储mode及亮度值Settings.System.getIntForUser()  //通过此接口来读取mode及亮度值

4)BrightnessController的监听机制

BrightnessController中有个内部类BrightnessObserver,继承自ContentObserverprivate class BrightnessObserver extends ContentObserver{…}

对ContentProvider中指定的URI进行监听,如果该URI对应的数据发生了变化就可以及时得到监听并处理。

BrightnessObserver主要监听:亮度调节模式、亮度值的变化;

当监听到uri发生变化时,回调onChange函数。

updateMode();   //更新模式

updateSlider();   //更新拖动条

(二)Lights服务接口

代码:

frameworks\base\core\java\android\os\IPowerManager.aidl

注:

android系统提供了一种描述语言来定义具有跨进程访问能力的服务接口,这种描述语言称为Android接口描述语言(Android Interface Definition Language, AIDL)。以AIDL定义的服务接口文件以aidl为后缀名,在编译时,编译系统会将它们转换成java文件,这是需要在\frameworks\base\Android.mk文件中添加对应的aidl文件,才会转换为java文件。

IPowerManager只是提供服务的接口,如:

interface IPowerManager{…// temporarily overrides the screen brightness settings to allow the user to// see the effect of a settings change without applying it immediatelyvoid setTemporaryScreenBrightnessSettingOverride(int brightness);void setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(float adj);…}

具体实现在——>framework层

(三)Lights框架层(Framework)

(1)JAVA层

1)frameworks\base\core\java\android\os\PowerManager.java中,如下:public void setBacklightBrightness(int brightness) {try {mService.setTemporaryScreenBrightnessSettingOverride(brightness);} catch (RemoteException e) {}}

2)接着调用PowerManagerService的接口(注意:真正的系统调用在frameworks/base/services)

frameworks\base\services\java\com\android\server\PowerManagerService.java,如下: public void setTemporaryScreenBrightnessSettingOverride(int brightness) {mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);…}

3)frameworks\base\services\core\java\com\android\server\lights\LightsService.java

依次调用setBrightness()--->setLightLocked()--->setLight_native()

(2)Native层

【衔接底层c/c++库与Java应用程序间的接口正是JNI(Java Native Interface)】

而setLight_native是JNI接口函数,主要在jni下实现,如:

frameworks\base\services\core\jni\com_android_server_lights_LightsService.cpp而在JNI层中会init一个native,其中又会引用HAL层,具体如下:HAL层调用:devices->lights[light]->set_light(devices->lights[light],&state);

(四)Lights本地层(HAL-硬件抽象层)

首先记住几个重要的结构体:

在hardware\libhardware\include\hardware\lights.h下定义:light_state_t 、 light_device_t在hardware\libhardware\include\hardware\hardware.h下定义: hw_module_t、hw_device_t

具体实现:

hardware\qcom\display\liblight\lights.cstatic intopen_lights(const struct hw_module_t* module, char const* name,  struct hw_device_t** device) static int
set_light_backlight(structlight_device_t* dev,  struct light_state_t const* state) 

​​​​​其中set_light_backlight()把背光亮度值brightness写入/sys/class/leds/lcd-backlight/brightness文件中。(通过write_int(LCD_FILE, brightness);进行写入)然后LED驱动再读取此值,进行背光调节。

(五)Lights驱动层(Driver)

背光驱动提供的用于调节亮度接口是:/sys/class/leds/lcd-backlight/brightness。这个接口由LED驱动注册得来,源码位于Kernel/driver/leds/led-class.c中

上面,set_light_backlight()通过write()把背光值写入到/sys/class/leds/lcd-backlight/brightness文件后,会触发调用led_brightness_store函数,经过led_brightness_store() --->led_set_brightness()--->led_cdev->brightness_set(led_cdev,value)的调用流程,最后调用到xxx_led_set(),

Android背光系统实现相关推荐

  1. android背光系统,Android 的背光控制

    Android 背光的控制: 屏幕背光设置 packages/apps/Settings/src/com/android/settings/BrightnessPreference.java 背光设置 ...

  2. Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方

    Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方 如果你想修改MTK的AAL自动背光调整相关的内容,那么根据情况,可能需要涉及如下文件: 这是Android L版本的 ...

  3. Android中背光系统架构

    Mg Android中背光系统架构 Email:wei7758@126.com Blog:http://blog.csdn.net/yinwei520 Author:Yww Time:2011-9-2 ...

  4. win7 android双系统,Win7+Android双系统 Acer AOD255评测

    Win7+Android双系统 Acer AOD255评测 2010年09月16日 00:08作者:尹航编辑:尹航文章出处:泡泡网原创 分享 泡泡网上网本频道9月16日 Acer Aspire One ...

  5. android背光设置

    先来看MTK官方给出的Lights(光)架构图: 图1 这是MTK 2011年的图,下面给出MT6575/6577中此部分的框架图: 图2 再来看更体现一些细节的框架图: 图3 由此可见光系统从上到下 ...

  6. Android手机系统adb常用的命令

     adb常用的命令有哪些?小编今天为大家奉上Android手机系统adb常用的命令,内容如下: 要使用adb命令,手机需要打开USB debug. 安装软件 adb install apk文件名称 ...

  7. 深入理解Android消息处理系统——Looper、Handler、Thread

    引用自:http://my.unix-center.net/~Simon_fu/?p=652 熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统.而Andro ...

  8. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  9. Android实现系统关机和重启

    Android实现系统关机和重启 一.将APP提升至系统权限 在AndroidMenifest.xml中添加如下代码: android:sharedUserId="android.uid.s ...

最新文章

  1. 智能车竞赛技术报告 | 智能车视觉 - 武汉理工大学 - WHY
  2. @Slf4j注解介绍
  3. 一步一步asp.net_页面静态化管理
  4. 区块链技术应用的关键问题和挑战
  5. 后缀树的构造方法-Ukkonen详解 [转]
  6. CF932G-Palindrome Partition【PAM】
  7. 《Python Cookbook 3rd》笔记(3.1):数字的四舍五入
  8. 面对10ms的延迟,这群人就是一个字“改”
  9. mysql limit 5 5 正确_MySql 5.7 同时使用order by和limit时结果集不正确的问题
  10. Cloud Foundry 在 Azure 中国正式发布
  11. python 成员运算符_Python的“ in”和“ not in”成员资格运算符
  12. 领跑衫获奖感言 课程总结
  13. PySwitch - Python 环境快速切换
  14. jacob转pdf linux,Java 使用jacob实现doc转pdf(附带其他方法分析)
  15. 全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)
  16. 计算机校本培训心得,校本培训心得体会(通用3篇)
  17. 解决java 图片压缩图片图片变色问题
  18. YOLOv5改进--添加CBAM注意力机制
  19. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)
  20. vue2数据双向绑定的原理

热门文章

  1. Android 悬浮窗的使用(2)
  2. html5中hr是什么意思,【hr是什么意思】hr的意思_hr指的是什么_亲亲宝贝网
  3. jstree使用教程
  4. python图像处理第七课--图像缩放、翻转、旋转、平移--小白的成长历程
  5. 维特根斯坦思想概述南京大学陈亚军
  6. 美光科技股价上涨13% 创下自2011年12月以来最大单日涨幅
  7. Java常见面试题(JVM)
  8. Linux--增加用户、添加用户组
  9. linux 给用户添加权限
  10. 做H5页面需要学什么