Android灯光系统--深入理解背光灯

一、怎么控制背光灯(简述)

APP将亮度值写入数据库

线程检测数据库的值是否发生变化

这种机制成为“内容观察者”--contentObserver

二、系统控制背光灯机制

注册LightService

getService(Lights);

根据ID获得背光灯

三、系统初始化流程

创建SystemServer

创建LightService服务

创建电量管理服务PowerManagerService

注册内容观察者--ContentObserver

实例化内容观察者

注册内容观察

注册了4个Recever(BatteryReceiver、DreamReceiver、UserSwtichedRecever、DockReceiver)

1个contentObserver(屏保、睡眠时屏保启动、连接底座屏保启动、插入并且屏幕开启、屏幕亮度、屏幕亮度模式)

复写内容观察者里面的方法--背光操作onChange();

四、APP层调用系统层的背光灯具体分析

将亮度写入数据库,控制亮度

URI发生变化,自动识别调用ContentObserver中的onChange();方法

调用PowerManagerService.java:handleSettingsChangedLocked();

调用PowerManagerService.java:

-> updateSettingsLocked(); - 获得mScreenBrightnessSetting类

-> updatePowerStateLocked(); - updateDisplayPowerStateLocked();更新背光显示电源状态

updateDisplayPowerStateLocked();

-> mDisplayPowerRequest.screenBrightness = screenBrightness;获得背光灯请求

-> requestPowerState(mDisplayPowerRequest,

mRequestWaitForNegativeProximity); - sendUpdatePowerStateLocked();发送更新电量状态

DisplayPowerController.java--显示器电源管理,相关sensor配合

-> 发送消息,通知updatePowerState();更新能量状态

-> 调用animateScreenBrightness();函数

-> DisplayPowerstate.java - Screenstate //屏幕状态

- SreenBrightness //屏幕亮度

- ColorFade //屏幕色彩

-> SetScreenBrightness();

-> scheduleScreenUpdate(); - 通过scheduleScreenUpdate来实现的mLocked.notifyALL()唤醒所有进程

- photonicModulator.run(); --线程

- mLock.wait()

- setBrightness()

- mBackLight.setBrightness();

- setLightLocked();

- jni

- hal

- device

五、系统背光设置深入分析

总体:Setting -> Dispaly -> Brightness level:BrightnessDialog.java

setting中调节亮度

BrightnessDialog.java

findViewID()响应函数

onstart()

registerCallbacks()函数实现

mBrightnessObserver.startObserving();

-> registerContentObserver();注册观察者

-> mControl.setOnChangedListener(this); - 调用onChanged();方法

设置背光灯setBrightness(val); 优化:滑动过程直接调用。结束滑动块时,写入数据库

最终还是调用PowerManagerService.java:updatePowerStateLocked();

附滑块优化代码:

if (!tracking) {

Settings.System.putIntForUser(mContext.getContentResolver(),

Settings.System.SCREEN_BRIGHTNESS, val,

UserHandle.USER_CURRENT);

}

六、APP实现背光灯调节详细代码

1. 关闭自动调整背光,初始化背光值

try {

//关闭自动调整背光

Settings.System.putInt(getContentResolver(),

Settings.System.SCREEN_BRIGHTNESS_MODE,

Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

brightness = android.provider.Settings.System.getInt(getContentResolver(),

android.provider.Settings.System.SCREEN_BRIGHTNESS); //取出当前数据库的背光灯数字

mLightSeekBar.setProgress(brightness*100/255);

} catch (Settings.SettingNotFoundException e) {

e.printStackTrace();

}

2. 通过滑块设置屏幕亮度

mLightSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

@Override

public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

brightness = seekBar.getProgress(); //取出当前滑块值

brightness = brightness*255/100;

android.provider.Settings.System.putInt(getContentResolver(),

android.provider.Settings.System.SCREEN_BRIGHTNESS,

brightness); //设置屏幕背光亮度

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

}

});

android 背光灯分析,Android灯光系统--深入理解背光灯相关推荐

  1. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  2. Android实现mp3分析,Android编程实现播放MP3功能示例

    本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...

  3. android 背光灯分析,android - LCD背光灯不再工作:Android - 堆栈内存溢出

    按下Android电源按钮时,LCD背光灯会打开和关闭. 但是从过去的一天开始,我的LCD背光灯没有打开. 按下15至20次后,背光灯会亮起几分钟,然后再次熄灭. 当我执行电源按钮按下操作时,我发现它 ...

  4. OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...

  5. android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications

    Android应用程序内存分析 原文链接:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html ...

  6. android dropbox anr分析,Android如何分析排查ANR

    释放双眼,带上耳机,听听看~! 在Android开发中,当程序发生异常时会抛出异常信息,先说下三种常见类型: 列表内容KeyDispatchTimeout(谷歌default 5s,MTK平台上是8s ...

  7. android tcpdump log分析,android 系统启动过程中加入tcpdump和logcat

    一.android 系统启动过程中加入tcpdump ,分析开机启动后,系统与服务器端的消息交互. 1. init.rc 中的修改 1)在init.rc 中加上tcpdump service. ser ...

  8. android 亮屏分析,Android亮屏速度分析总结

    前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路. 计算按 ...

  9. android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析

    Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...

最新文章

  1. 最大数值(不能使用比较运算符)
  2. python好学-所有人都说Python 简单易学,为何你觉得难?
  3. java I/O思维导图
  4. PL/SQL 数据库连接工具的下载、安装与使用实例演示
  5. struts2 的struts.properties配置详解
  6. 双重检查(Double-Check)
  7. MFC 缩放和显示IplImage
  8. 高并发与负载均衡-keepalived-概念介绍
  9. 蓝桥杯java能用编译器1吗_学java的你,这些英文单词都掌握了吗?
  10. Diango博客--12.开发 Django 博客文章阅读量统计功能
  11. CMS模板引擎:XHtmlAction
  12. 信创产业已成现象级新风口 代码“源头”安全该如何守护?
  13. jquery-animate()动画
  14. DenseNet算法详解
  15. mysql怎么创建表可视化_MYSQL系列1_MySQL的安装,可视化工具的使用,以及建库建表等...
  16. calib matlab,toolbox_calib 图片处理,各种用于 的.M文件,非常适 初学者。 matlab 242万源代码下载- www.pudn.com...
  17. 如何将陈述句变为疑问句
  18. java 参数命名规则_Java命名规范
  19. STM32+QRCode二维码生成
  20. Eclipse读取properties文件中文乱码问题

热门文章

  1. c语言创建一个bat文件内容,BAT(批处理)文件编写详细手册
  2. Mysql 使用企业级MEB进行数据库物理备份与恢复
  3. python mpi开销_基于Python的MPI
  4. 精益生产目视管理法 (zt)
  5. android录音波浪动画_Android 自定义波浪动画--让进度浪起来~
  6. Nuxt初始化项目报错
  7. 汉字转换成NCR编码的字符
  8. 存储网络RDMA:NVME over RDMA
  9. Sharepoint + Office Infopart + Quick Apps for Sharepoint搭建无纸化工作平台
  10. 后缀以.mmap的文件用什么程序打开啊