需求及场景
自己这几年开发过的几款产品遇到这样的情况,实际场景如下:
- 屏幕最大亮度太亮
- 屏幕最小亮度太暗了,最小亮度调到0%时候,屏幕黑黢黢的看不到屏幕了
- 屏幕亮度在0%到60% 调节亮度发现调节没有用
- 屏幕亮度在90%-100% 调节没有用
问题分析
屏幕亮度用硬件的专业术语就是背光、又是通过pmw 调节的,最终就是给它电压电流来调节。
所以简单理解如下:
针对问题1、2 、4我们可能通过系统调节来更正解决的。这里可能存在问题,不同产品用的不同的屏幕、同一个电池。电池和屏幕硬件没有对齐,比如:低电压限制死了,高电压限制死了,不可调节了。那么就会存在:90%以上的亮度一样的,调节复用;60%以下的亮度一样的,不可调节。
适配方案
在一定范围类取值设置,但是进度条还是一样的控制。比如:0-60% 亮度不变,那么我们把60%-100%的控制范围扩充到0%-100%,控制范围变大,控制区域保持一致。
一、相关资源参考
原创不易,尊重原创,下面提供几个亮度相关的内容,可以参考。不同Android版本对应的逻辑、代码、修改位置可能不一致,但是思想一致
SystemUI基本内容熟悉-Brightness 模块
可以参考我之前的文章,修改必须从亮度条控制的地方开始了解整个流程
Android12_SystemUI下拉框新增音量控制条
查看基础和亮度控制模块的分析
Android13_SystemUI下拉新增音量控制条
查看跟亮度模块相关的部分
亮度控制部分相关资源
android 修改最低亮度值,不要太暗
DisplayManagerService 亮度调节
PowerManagerService
Android framework配置默认屏幕亮度值源码分析
Android10 安卓修改屏幕背光默认亮度
二、修改方案
修改点一
修改位置:\frameworks\base\core\java\com\android\internal\display\BrightnessSynchronizer.java
设置最低亮度为最大亮度的65%,即:255*0.65=166
具体修改如下:
brightnessIntToFloat brightnessFloatToIntRange 方法中最小亮度设置为166
/**
* Converts between the int brightness system and the float brightness system.
*/
public static float brightnessIntToFloat(int brightnessInt) {
if (brightnessInt == PowerManager.BRIGHTNESS_OFF) {
return PowerManager.BRIGHTNESS_OFF_FLOAT;
} else if (brightnessInt