android 背光灯分析,Android灯光系统--深入理解背光灯
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灯光系统--深入理解背光灯相关推荐
- android内存占用分析,Android App性能评测分析-内存篇
1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...
- Android实现mp3分析,Android编程实现播放MP3功能示例
本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...
- android 背光灯分析,android - LCD背光灯不再工作:Android - 堆栈内存溢出
按下Android电源按钮时,LCD背光灯会打开和关闭. 但是从过去的一天开始,我的LCD背光灯没有打开. 按下15至20次后,背光灯会亮起几分钟,然后再次熄灭. 当我执行电源按钮按下操作时,我发现它 ...
- OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具
用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...
- android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications
Android应用程序内存分析 原文链接:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html ...
- android dropbox anr分析,Android如何分析排查ANR
释放双眼,带上耳机,听听看~! 在Android开发中,当程序发生异常时会抛出异常信息,先说下三种常见类型: 列表内容KeyDispatchTimeout(谷歌default 5s,MTK平台上是8s ...
- android tcpdump log分析,android 系统启动过程中加入tcpdump和logcat
一.android 系统启动过程中加入tcpdump ,分析开机启动后,系统与服务器端的消息交互. 1. init.rc 中的修改 1)在init.rc 中加上tcpdump service. ser ...
- android 亮屏分析,Android亮屏速度分析总结
前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路. 计算按 ...
- android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析
Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...
最新文章
- 最大数值(不能使用比较运算符)
- python好学-所有人都说Python 简单易学,为何你觉得难?
- java I/O思维导图
- PL/SQL 数据库连接工具的下载、安装与使用实例演示
- struts2 的struts.properties配置详解
- 双重检查(Double-Check)
- MFC 缩放和显示IplImage
- 高并发与负载均衡-keepalived-概念介绍
- 蓝桥杯java能用编译器1吗_学java的你,这些英文单词都掌握了吗?
- Diango博客--12.开发 Django 博客文章阅读量统计功能
- CMS模板引擎:XHtmlAction
- 信创产业已成现象级新风口 代码“源头”安全该如何守护?
- jquery-animate()动画
- DenseNet算法详解
- mysql怎么创建表可视化_MYSQL系列1_MySQL的安装,可视化工具的使用,以及建库建表等...
- calib matlab,toolbox_calib 图片处理,各种用于 的.M文件,非常适 初学者。 matlab 242万源代码下载- www.pudn.com...
- 如何将陈述句变为疑问句
- java 参数命名规则_Java命名规范
- STM32+QRCode二维码生成
- Eclipse读取properties文件中文乱码问题
热门文章
- c语言创建一个bat文件内容,BAT(批处理)文件编写详细手册
- Mysql 使用企业级MEB进行数据库物理备份与恢复
- python mpi开销_基于Python的MPI
- 精益生产目视管理法 (zt)
- android录音波浪动画_Android 自定义波浪动画--让进度浪起来~
- Nuxt初始化项目报错
- 汉字转换成NCR编码的字符
- 存储网络RDMA:NVME over RDMA
- Sharepoint + Office Infopart + Quick Apps for Sharepoint搭建无纸化工作平台
- 后缀以.mmap的文件用什么程序打开啊