android背光控制 自动关闭,Android P自动背光原理
目录:
1,sensor 基本架构图
2,Lsensor UI 手动设定
3,Lsensor 自动算法
关键词:
lux : 环境光线
nit: 屏幕亮度
backlight:UI 中设定进度条显示数字
1-sensor 基本架构图
Light sensor 属于sensor 其中的一个设备, 因此架构都一样,light sensor 有I2C 接口,spi 接口,要从硬件上选择一种就可以, 最好选择I2C , 进行i2c通信就可以获取lux 值
图片.png
Lsensor 数据获取步骤(获取lux 可定制开发app)
Setp0:获取传获取传感器对象
Setp1:感器管理器对象
Setp2:定义事件监听器-----》下面有给出在原生code 中获取lux(onSensorChanged)
Setp3:注册事件监听器
Setp4:卸载事件监听器
图片.png
2,Lsensor UI 手动设定
在原生android P code 中,亮度的调节分为三中方式
1) 在设置中手动设定亮度方式
2) 在system UI 中手动设定亮度
3) 在播放视频时候设定亮度
上面的几种方式最后调用都到了updatePowerState(), 手动更改亮度,对自动亮度的调整有影响
2.1 System UI , 设置中进行了设定亮度
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
图片.png
最后背光的修改都要走到下面的函数
frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
private void animateScreenBrightness(int target, int rate) {……….}
3,Lsensor 自动算法
基本思路:
Stetp 1:创建三条曲线 lux---nits---backlight
mNitsToBacklightSpline = Spline.createSpline(nits, normalizedBacklight);
mBacklightToNitsSpline = Spline.createSpline(normalizedBacklight, nits);
mBrightnessSpline = Spline.createSpline(lux, nits);----->最重要的曲线, lux-->nits (由nits->bightlight)
Step 2:
手动调整了亮度-> addUserDataPoint(float lux, float brightness) ->重新调整曲线(mBrightnessSpline = Spline.createSpline(lux, nits))--->记录用户调整值,根据用户的习惯,重新拟合曲线
Step 3:
最后调用animateScreenBrightness,这里利用设定背光时间rate,逐步更新,达到不闪烁
3.1 code 流程
创建曲线:
frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
frameworks/base/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
public DisplayPowerController(Context context,
DisplayPowerCallbacks callbacks, Handler handler,SensorManager sensorManager, DisplayBlanker blanker) {
mBrightnessMapper = BrightnessMappingStrategy.create(resources);
}
下面都是制造商的配置数组, 然后根据配置建立样条曲线
int[] brightnessLevelsBacklight---->config_autoBrightnessLcdBacklightValues
float[] luxLevels------------------>config_autoBrightnessLevels
float[] brightnessLevelsNits------->config_autoBrightnessDisplayValuesNits
float[] nitsRange------------------>config_screenBrightnessNits
int[] backlightRange -------------->config_screenBrightnessBacklight
图片.png
mBrightnessSpline = Spline.createSpline(lux, nits);
用户手动调整了亮度:
frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
frameworks/base/services/core/java/com/android/server/display/AutomaticBrightnessController.java
DisplayPowerController--> BrightnessMappingStrategy.create()-AutomaticBrightnessController-----> mAutomaticBrightnessController.configure
图片.png
下图进行了对比,默认曲线有用户调整后曲线的情况:
图片.png
问题:什么时候用户清除配置,reset 动作 (感觉nrea 不需要考虑)
1, 切换用户
2, BrightnessConfigure 重新配置
3, 屏幕由交互状态进入非交互状态时,这个是有display 状态决定
3.2 animateScreenBrightness 分析
有上面可以知道event 携带参数lux ,根据lux (利用拟合曲线)算出backlight 值,最后由animateScreenBrightness(int target, int rate)函数进行更新,在参数中就有目标target, 更新rate (分fast,slow)。
如果rate = 0 ,直接更新,可能闪屏。
如果rate > 0 ,根据rate 速度逐步进行更新背光值
frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
rate 配置:
图片.png
更新目标背光流程:
animateScreenBrightness-->mScreenBrightnessRampAnimator.animateTo(target, rate)--->postAnimationCallback();--->mAnimationCallback-->mProperty.setValue(mObject, mCurrentValue);--->
最后走到了:DisplayPowerState.java: setValue-->setScreenBrightness
图片.png
frameworks/base/services/core/java/com/android/server/display/DisplayPowerState.java:
图片.png
android背光控制 自动关闭,Android P自动背光原理相关推荐
- android 方向控制界面,Android Studio屏幕方向以及UI界面状态的保存代码详解
项目:orientation package com.example.orientation; import android.os.bundle; import android.util.log; i ...
- android 摇杆控制方向键,Android Studio中实现摇杆
今天和大家分享一下Android Studio实现摇杆,原理很简单,代码中有对应的注释. 实现效果图 实现代码 package com.example.fragmentcar1.view; impor ...
- android权限控制泄露,Android应用的权限泄露分析
摘要: 随着智能移动终端功能和用户体验的日益完善,智能手机已经被越来越多的用户使用.研究数据表明,Android手机的购买量正在逐步超越个人电脑.Android系统被应用在越来越多的智能手机上面,但是 ...
- android 蓝牙控制开发,Android开发工控软件--蓝牙控制
最近一直在忙Android的工控软件设计,写一点心得,希望对这方面开发的有一点带你帮助. 1)从蓝牙接收了数据又如何保存? 之前没有想过接收的数据如何保存,就简单的用一个字节数组进行保存,后来处理数据 ...
- android 代码控制音量,Android的framework层音量控制原理分析--hot(key)处理
Android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装. 正常处理过程: 1.调整音量是通过AudioManager ...
- android代码控制微信,Android转战微信小程序 - vscode安装和配置
前言 前一篇文章稍微总结了微信小程序的一些简单入门用法,这一篇文章说一下开发工具的选择,其实作为一个初次接触的萌新,微信开发者工具就能很好的作为日常的开发了,本人之所以选择vscode是刚入门时被一前 ...
- android语音控制demo,Android简单语音控制手机应用
[实例简介] 通过用户语音将用户输入的语音识别出来,并完成预定义的命令操作.可作为语音识别,语音控制开发的示例代码. [实例截图] [核心代码] VoiceControl └── VoiceContr ...
- Android 9.0 自动背光机制分析
在android 9.0中,相比android 8.1而言,背光部分逻辑有较大的调整,这里就对android P背光机制进行完整的分析. 1.手动调节亮度 1.1.在SystemUI.Settings ...
- linux蜂鸣器控制实验,【Linux公开课】蜂鸣器使用、LCD背光控制、触摸屏校准、GPIO操作...
摘要为方便使用蜂鸣器,系统为蜂鸣器提供类似LED的操作接口,对应的操作文件是/sys/class/leds/beep/brightness.写入1使蜂鸣器鸣叫,写入0停止鸣叫- 8.12 蜂鸣器使用 ...
最新文章
- 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序
- 字节跳动大佬的Python自学笔记.pdf
- 给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文
- 《Python数据科学指南》——1.23 采用键排序
- linux系统牵引程序设置,Linux上安装Wine运行AutoCAD实例[多图]
- 微信小程序 蓝牙的使用
- HTML5新特性基础学习笔记下
- python print sys.stdout
- win10下安装Pyspider
- elasticsearch docker无法挂载_Docker 容器监控方案怎么选?看看这套开源方案
- Caffe学习:使用pycaffe绘制loss、accuracy曲线
- CMMI认证要求有哪些
- Java开发环境搭建实验报告
- MSAgent技术应用
- php宠物管理系统的开题报告,基于JSP的宠物医院开发与设计(开题报告)
- 声网(agora)音视频通话sdk—微信小程序demo
- 软件等于计算机程序加数据加什么,南航计算机软件数据结构上机实践报告
- Cisco PT 案例五:VLAN(Trunk模式实践)
- vivo和小米鸿蒙系统哪个好,vivo和华为还有小米,哪个系统流畅度更好?
- 全网最细------爬取4k高清大图