安卓从入门到进阶第九章(自动亮屏)
安卓从入门到进阶第六章(dumpsys初探)
我希望文章是给出一个思路,让你能够跟着这个,找到框架,然后自行分析,总结,得到知识。
阅读代码,是需要长时间的训练,从问题出发,就跟从项目出发一样,在实战当中,倒逼自己提升,思考。
这一章分享一个小知识,关于自动亮屏的定位策略。
默认的配置值在
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings
文件
DatabaseHelper.java
loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
R.bool.def_screen_brightness_automatic_mode);
这里配置值位置:
frameworks\base\packages\SettingsProvider\res\values
defaults.xml
配置着默认值:
<bool name="def_screen_brightness_automatic_mode">true</bool>
这样子我们就知道了,代码中检索使用这个
SCREEN_BRIGHTNESS_MODE 信息了。
我们可以在设置和下拉状态栏,只需要将设置值传入系统即可,后续的动作都在系统中处理。检索这个 SCREEN_BRIGHTNESS_MODE ,会找到整个的关联。
具体的文件为:
frameworks\base\services\core\java\com\android\server\display
AutomaticBrightnessController.java(监听光感传感器,在变化后响应)
和
DisplayPowerController.java(这里贴一段关键的逻辑,自动亮屏获取值,然后返回brightness,然后设置下去。)
这里直接就会走到设置屏幕亮度的。整个上层只是设置开关,整体逻辑都是驱动和服务处理。如果需要分析这里的故障:
编译版本时候,需要开启AutomaticBrightnessController.java 中的
private static final boolean DEBUG = false;
private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT = false;
改成
private static final boolean DEBUG = true;
private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT =true;
再将DisplayPowerController.java
private static final boolean DEBUG = false;
private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;
改成
private static final boolean DEBUG = true;
private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = true;
整体的代码流程为:自动亮屏开启后,AutomaticBrightnessController会收到变化回调,在回调后,触发handleLightSensorEvent。
随后会调用到DisplayPowerController里面,从AutomaticBrightnessController.config进行更新,然后获取最新的亮度值,赋值到brightness=getAutomaticScreenBrightness,然后动态更新:
如果你可以调试,那就直接在这里下断点,分析就好了。
具体调试,参考安卓从入门到进阶第四章(调试方法),如果你对这块知识感兴趣,记得实战,跟着这个框架,进行阅读,分析。
关于上一章遗留的问题,下一章进行讲解。也就是系统不断的弹出一个界面,我想知道是谁拉起来的,该怎么分析呢?
我们下一节来讲这个,具体会说一些关于binder的知识(忽略细节,直接关注核心),可以先看看这个文章(文中的zygote拼错了,不要在意)
安卓从入门到进阶第二篇(框架流程)
后台回复 精华 获取去年一年的精彩 PDF。
推荐你读:
面子要挣
四种收入结构
一个逻辑陷阱
给初入职场朋友的8条走心建议
安卓从入门到进阶第九章(自动亮屏)相关推荐
- 安卓从入门到进阶第六章(dumpsys初探)
后续还是会写一写关于安卓的知识,只是写的就按照轻快,实战为主,不做过多原理的剖析了.今天就来处理一个问题, 如何快速定位当前手机屏幕上某个区域上是哪个应用绘制的? 如下为解决方案: 使用 adb sh ...
- Java从入门到精通 第九章 数字处理类
Java从入门到精通 第九章 数字处理类 一.数字格式化 二.数学运算 1)Math类 2)常用数学运算方法 三.随机数 1)Math.random()方法 2)Random类 四.大数字运算 1)B ...
- 华为手机如何设置微信来消息自动亮屏?
华为手机微信来消息不亮屏,漏过重要信息和电话怎么办?微信来消息没有自动亮屏,如果网络没有问题,就是设置项有问题.下面详细介绍微信来消息自动亮屏的设置方法. 一.确认手机已打开允许通知 1.确认系统已开 ...
- html让手机屏幕常亮,怎么设置屏幕常亮-手机皮套如何实现翻盖自动亮屏?原来这么简单...
经常关注手机的人肯定曾经思考过这样一个问题:为什么有的手机支持皮套翻开自动亮屏.盖上之后自动灭屏?到底是怎么实现的呢?为什么我的皮套不支持呢? 其实这个功能主要是依靠手机中的一个传感器完成的:霍尔感应 ...
- python编程从入门到实践第九章——类
相关文章链接: python编程从入门到实践第二章--变量和简单数据类型 python编程从入门到实践第三章--列表简介 python编程从入门到实践第四章--操作列表 python编程从入门到实践第 ...
- HT合泰单片机入门教程(第二章 点亮第一个LED灯)
文章目录 系列文章目录 前言 一.新建工程 1.启动HT-IDE3000 2.建立工程 二.点亮LED灯 1.了解I/O 2.LED代码 总结 系列文章目录 第一章 HT单片机环境搭建 第二章 点亮第 ...
- 安卓从入门到进阶第一篇(环境搭建)
"转发,助力一波!" 1.1 系统配置 1.1.1 开发环境 我们平时使用的电脑环境,基本都是Windows操作系统,为了开发Android去将电脑装成Linux系统,显而易见不太 ...
- python编程 从入门到实践 第九章 类(下)
继承 一个类继承另一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,而新的类称为子类 class Car:def __init__(self,make,model,year):self. ...
- python编程 从入门到实践 第九章 类(上)
类中的函数称为方法 class Dog:def __init__(self,name,age):"""初始化name和age"""self. ...
最新文章
- C语言条件语句(就做个笔记,云储存一下)
- QT制作窗口切换的小程序
- 使用 x3dom 框架及 WebGL 在浏览器上显示 3 维模型
- 统计一下你写过多少代码
- 配置单节点伪分布式Hadoop
- Python 代码混淆和加密技术
- 基于 MySQL Binlog 的 Elasticsearch 数据同步实践
- linux 的读写操作(转)
- python管道安装包_Python 炫技操作:安装包的八种方法
- linux下安装erlang
- 设计模式_1_工厂模式与抽象工厂
- Win7蓝屏代码0x000000001e怎么解决
- 计算机设计大赛国奖作品_4. 界面设计
- 信息奥赛一本通的递推练习
- linux非对称内存,CryptoAPI与OpenSSL RSA非对称加密解密(PKCS1 PADDING)交互
- JAVA计算机毕业设计美发门店管理系统Mybatis+系统+数据库+调试部署
- springboot集成微信app支付
- char[]和char* 输出长度不同
- 初中学考英语听说计算机考试,2018中考英语听说计算机考试工作重要通知
- 典型分布式计算技术的分析和比较