苹果亮度自动调节怎么关闭_Android 亮度自动调节是如何实现的?
下拉状态栏有个亮度的进度条,如果开启了亮度自动调节开关,会随着周围光线变化,这个进度条也会随着变化,接下来就是看看这个功能是如何实现的。
源码版本
基于 Android 9.0 分析。
BrightnessDialog,位于:frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
ToggleSliderView,位于:frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSliderView.java
DisplayPowerController,位于:frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
AutomaticBrightnessController,位于:frameworks/base/services/core/java/com/android/server/display/AutomaticBrightnessController.java
BrightnessMappingStrategy,
概述
状态栏里亮度页面是 BrightnessDialog,其中进度条设置是 ToggleSliderView,亮度自动调节主要是 DisplayPowerController 和 AutomaticBrightnessController 两个类,当亮度发生变化时,如果关联到 ToggleSliderView,用的是 ContentObserver,Uri 为 Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ。
源码梳理
1、BrightnessDialog#onCreate:
@Override
2、这里进行了 BrightnessController 初始化,来看下:
public BrightnessController(Context context, ImageView icon, ToggleSlider control) {
又进行了 BrightnessObserver 初始化:
/** ContentObserver to watch brightness **/
其实我目前下载的源码,这块功能是不全的,我已经加上了,哪里进行 BrightnessObserver 的 ContentObserver 注册呢?
3、回到 BrightnessDialog#onStart:
@Override
4、调用mBrightnessController.registerCallbacks();
最终走到 mStartListeningRunnable:
private
当亮度有变化时,会走 BrightnessObserver#onChange,最终走到:
private
走 updateSlider方法,到 :
private void animateSliderTo(int target) {
5、跳到 ToggleSliderView#setValue:
@Override
接下来就是看看亮度自动调节主要的两个类 DisplayPowerController 和 AutomaticBrightnessController。DisplayPowerController 属于 Display 模块,其控制设备屏幕亮灭、背光、与Power关系密切,这里主要看下屏幕亮度的控制这方面的逻辑。
6、首先,在 DisplayManagerService 中初始化 DisplayPowerController,如下:
private
7、接着看下 DisplayPowerController 构造方法,如下:
public DisplayPowerController(Context context, DisplayPowerCallbacks callbacks, Handler handler, SensorManager sensorManager, DisplayBlanker blanker) {
由于亮屏之后屏幕自动亮度才会生效,所以在亮屏的时候,流程会走到 DisplayPowerController 中的核心函数 updatePowerState():
private void updatePowerState() {
接下来分别看看 autoBrightnessAdjustment 和 newAutoBrightnessAdjustment 怎么来的?
autoBrightnessAdjustment 是来自 mTemporaryAutoBrightnessAdjustment 或 mAutoBrightnessAdjustment 赋值,mAutoBrightnessAdjustment 在第 7 步mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
有初始化,看下 getAutoBrightnessAdjustmentSetting():
private float getAutoBrightnessAdjustmentSetting() {
继续看下 clampAutoBrightnessAdjustment:
private static float clampAutoBrightnessAdjustment(float value) {
这里注意下 MathUtils.constrain() 表示百分比缩放函数,比如 MathUtils.constrain(0.5, 0, 255) 表示 (255-0)*0.5。
这样了解了 autoBrightnessAdjustment,接下来看 newAutoBrightnessAdjustment。
8、回到 DisplayPowerController#updatePowerState(),看到 newAutoBrightnessAdjustment 调用了 AutomaticBrightnessController.getAutomaticScreenBrightnessAdjustment()
,最终是到了 BrightnessMapper#getAutoBrightnessAdjustment()
其中 mAutoBrightnessAdjustment 变量,赋值是在 BrightnessMapper#setAutoBrightnessAdjustment
:
@Override
9、BrightnessMapper#setAutoBrightnessAdjustment 这个方法调用又回到了 AutomaticBrightnessController#setAutoBrightnessAdjustment:
private boolean setAutoBrightnessAdjustment(float adjustment) {
AutomaticBrightnessController#setAutoBrightnessAdjustment
调用是来到 AutomaticBrightnessController#configure()
方法:
public void configure(boolean enable, @Nullable BrightnessConfiguration configuration,float brightness, boolean userChangedBrightness, float adjustment,boolean userChangedAutoBrightnessAdjustment, int displayPolicy) {
AutomaticBrightnessController#configure()
调用来到了 DisplayPowerController #updatePowerState()
。
这样也知道了 newAutoBrightnessAdjustment,继续 putAutoBrightnessAdjustmentSetting:
private void putAutoBrightnessAdjustmentSetting(float adjustment) {
就调到第 4 步 BrightnessObserver#onChange,进度条随之变化,Over!
拓展阅读
AOSP 源码下载
AOSP 源码整编单编
Android Studio 导入 AOSP 源码
苹果亮度自动调节怎么关闭_Android 亮度自动调节是如何实现的?相关推荐
- 苹果亮度自动调节怎么关闭_卢伟冰:Redmi K30 Pro解决安卓手机自动亮度调节痛点...
IT之家3月30日消息 Redmi近日正式发布新款Redmi K30 Pro手机,昨日晚间Redmi品牌总经理卢伟冰也在微博上介绍了Redmi K30 Pro的一个亮点功能:360度光感自动亮度调节. ...
- Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)
把独显直连关掉就行 (修好兄弟的电脑修到血压高,卸载核显驱动没用,想改注册表结果目标文件找不到,想关闭自适应亮度结果也没这选项,倒是尝试卸载独显驱动的时候发现了猫腻)
- android 关闭自动亮度,android – 如何打开和关闭自动亮度? (不重复)
我只是试图打开和关闭自动亮度. 我开始使用此代码(在onCreate方法内) final ToggleButton autoBrightToggle = (ToggleButton) findView ...
- Android 调节屏幕亮度(当前应用和系统亮度)
1.只改变当前程序屏幕亮度 当前屏幕亮度的取值范围:attrs.screenBrightness 0.0(暗)-1.0(亮) 需要屏幕恢复到系统亮度,可将 attrs.screenBrightnes ...
- android+系统屏幕亮度,android 设置系统屏幕亮度
android 设置系统屏幕亮度 权限 /** * 获得当前屏幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHT ...
- android 系统亮度,android 设置系统屏幕亮度
android 设置系统屏幕亮度 权限 /** * 获得当前屏幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHT ...
- 代码 直接调节显示设备亮度_LED显示屏参数系列,亮度是什么,如何调节,如何选择...
亮度概念: 亮度:在给定方向上, 每单位面积上的发光强度.亮度的单位是cd/m2,读作Candela per square metre(坎德拉每平方米).有时候LED显示屏厂家会标示亮度单位为nit( ...
- 亮度键消失、亮度键失灵且电脑亮度为最大 | 小米 | win11 | 解决办法最最最全合集
目录 情况说明 问题1:亮度键消失(可能仅限于小米电脑) 症状 解决方法 思路 teamviewer或向日葵远端 查看是否有需要更新的显示适配器 问题2:亮度键失灵且电脑亮度为最大(该问题适用于所有电 ...
- 笔记本运行linux亮度低,关于笔记本linux亮度调节
Laptop安装linux系统后,开机默认亮度是最大,每次开机都很刺眼,开机后调节好亮度后,重启又恢复了.现在介绍可以永久设置屏幕亮度的方法,这样就不用每次开机都设置亮度那么麻烦. 调节亮度的方法是: ...
- 怎样取消苹果手机x的静音设置_iPhoneX拍照声音怎么关?苹果iPhoneX相机声音关闭方法...
iPhoneX拍照声音怎么关?下面我们一起来学习下苹果iPhoneX相机声音关闭方法吧,操作其实很简单. iPhoneX无论是在相机设置还是声音设置中,都没有相机关闭选项.如果要关闭相机声音也很简单, ...
最新文章
- Science:睡眠剥夺影响大脑思考竟是因为蛋白质罢工了!
- LOAD_TYPE_VERSION_MISMATCH与TYPELOAD_NEW_VERSION错误分析
- Spring Boot集成Debezium监控数据库变化
- 获取 metadata 过程详解 - 每天5分钟玩转 OpenStack(167)
- eclipse php xdebug,Eclipse for php + Xdebug搭建PHP的调试环境
- 我同事今天被裁了,但我却涨了1万工资!
- ELK(ElasticSearch+LogStash+Kibana)搭建
- Spring Security OAuth2实现单点登录
- Codeforces Round #226 (Div. 2)
- Pareto Optimality 帕累托最优 是什么
- html静态页面作跳转
- 2020线性代数辅导讲义练习答案
- 视频接口详细设计方案
- 入行嵌入式开发若干年悟出的道理
- win7访问局域网计算机提示凭据,win7系统访问局域网共享文件时提示输入网络凭据的解决方法?...
- php在word中生成表格,word创建表格的三种方法分别是什么
- python实现12306车票查询
- Gazebo物理仿真环境搭建 实例
- Spring学习之IOC容器(二)
- Robocup3D第一次笔记
热门文章
- 陈计老师《代数不等式》p15例6的别证
- 【网站搭建】阿里云搭建个人网站详细流程
- Python requests练习:爬取猫眼电影排行
- 服务器进不去系统system,system是什么进程 system进程可以关闭吗
- win10自带输入法突然变成了繁体
- nmds与mds的区别_聚类分析和NMDS分析的基本步骤.doc
- 管理者如何制定团队目标?读完这篇你就懂了.
- 基于法律裁判文书的法律判决预测
- php求圆柱体积,认识圆柱体a href=http://ruiwen.com/friend/list.php(教师中心专稿)/a -- 小学数学教学资源网...
- 〖强暴贴〗号称全国最大开发者网络的CSDN多次出现低级错误 验证码形同虚设 开发人员竟是MVP