Android 12 设置默认的屏幕亮度百分比

1、安卓每个版本的更新, 其核心代码也会随之更新,本次为Android 12 版本默认屏幕亮度的修改。

其中涉及的核心代码主要有:

java 复制代码
packages\apps\Settings\src\com\android\settings\display\BrightnessLevelPreferenceController.java
frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java
frameworks/base/res/res/values/config.xml

2、设置默认亮度的主要方法代码

在BrightnessLevelPreferenceController中处理:

java 复制代码
 public class BrightnessLevelPreferenceController extends AbstractPreferenceController implements
            PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop {
     
  
     
        private ContentObserver mBrightnessObserver =
                new ContentObserver(new Handler(Looper.getMainLooper())) {
                    @Override
                    public void onChange(boolean selfChange) {
                        updatedSummary(mPreference);
                    }
                };
     
        public BrightnessLevelPreferenceController(Context context, Lifecycle lifecycle) {
            super(context);
            if (lifecycle != null) {
                lifecycle.addObserver(this);
            }
            PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            mMinBrightness = powerManager.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
            mMaxBrightness = powerManager.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
            mMinVrBrightness = powerManager.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR);
            mMaxVrBrightness = powerManager.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR);
            mContentResolver = mContext.getContentResolver();
            mDefaultBacklight = powerManager.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT);
        }

在PowerManager得到相应的值:

java 复制代码
  private void updatedSummary(Preference preference) {
            if (preference != null) {
                preference.setSummary(NumberFormat.getPercentInstance().format(getCurrentBrightness()));
            }
        }
     
        private double getCurrentBrightness() {
            final int value;
            if (isInVrMode()) {
                value = convertLinearToGammaFloat(System.getFloat(mContentResolver,
                        System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, mMaxBrightness),
                        mMinVrBrightness, mMaxVrBrightness);
            } else {
                value = convertLinearToGammaFloat(Settings.System.getFloat(mContentResolver,
                        System.SCREEN_BRIGHTNESS_FLOAT, mDefaultBacklight),
                        mMinBrightness, mMaxBrightness);
            }
            return getPercentage(value, GAMMA_SPACE_MIN, GAMMA_SPACE_MAX);
        }
     
        private double getPercentage(double value, int min, int max) {
            if (value > max) {
                return 1.0;
            }
            if (value < min) {
                return 0.0;
            }
            return (value - min) / (max - min);
        }

...

java 复制代码
public final class PowerManagerService extends SystemService
            implements Watchdog.Monitor {
     
    @VisibleForTesting
        PowerManagerService(Context context, Injector injector) {
            super(context);
     
            mContext = context;
    ......
            // Save brightness values:
            // Get float values from config.
            // Store float if valid
            // Otherwise, get int values and convert to float and then store.
            final float min = mContext.getResources().getFloat(com.android.internal.R.dimen
                    .config_screenBrightnessSettingMinimumFloat);
            final float max = mContext.getResources().getFloat(com.android.internal.R.dimen
                    .config_screenBrightnessSettingMaximumFloat);
            final float def = mContext.getResources().getFloat(com.android.internal.R.dimen
                    .config_screenBrightnessSettingDefaultFloat);
            final float doze = mContext.getResources().getFloat(com.android.internal.R.dimen
                    .config_screenBrightnessDozeFloat);
            final float dim = mContext.getResources().getFloat(com.android.internal.R.dimen
                    .config_screenBrightnessDimFloat);
     
            if (min == INVALID_BRIGHTNESS_IN_CONFIG || max == INVALID_BRIGHTNESS_IN_CONFIG
                    || def == INVALID_BRIGHTNESS_IN_CONFIG) {
                mScreenBrightnessMinimum = BrightnessSynchronizer.brightnessIntToFloat(
                        mContext.getResources().getInteger(com.android.internal.R.integer
                                .config_screenBrightnessSettingMinimum),
                        PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
                        PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
                mScreenBrightnessMaximum = BrightnessSynchronizer.brightnessIntToFloat(
                        mContext.getResources().getInteger(com.android.internal.R.integer
                                .config_screenBrightnessSettingMaximum),
                        PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
                        PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
                mScreenBrightnessDefault = BrightnessSynchronizer.brightnessIntToFloat(
                        mContext.getResources().getInteger(com.android.internal.R.integer
                                .config_screenBrightnessSettingDefault),
                        PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
                        PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
            } else {
                mScreenBrightnessMinimum = min;
                mScreenBrightnessMaximum = max;
                mScreenBrightnessDefault = def;
            }
    ..
    }

其中它是通过config中实现的:

java 复制代码
 public float getBrightnessConstraint(int constraint) {
            switch (constraint) {
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM:
                    return mScreenBrightnessMinimum;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM:
                    return mScreenBrightnessMaximum;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT:
                    return mScreenBrightnessDefault;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DIM:
                    return mScreenBrightnessDim;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DOZE:
                    return mScreenBrightnessDoze;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR:
                    return mScreenBrightnessMinimumVr;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR:
                    return mScreenBrightnessMaximumVr;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR:
                    return mScreenBrightnessDefaultVr;
                default:
                    return PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
        }

3、修改代码的位置:

复制代码
   --- a/frameworks/base/res/res/values/config.xml
    +++ b//frameworks/base/res/res/values/config.xml
    @@ -28,5 +28,5 @@
         <item name="config_screenBrightnessSettingMaximumFloat" format="float" type="dimen">1.0</item>
         <!-- Default screen brightness setting set.
         Set this to 0.4 for Default brightness Float.-->
    -    <item name="config_screenBrightnessSettingDefaultFloat" format="float" type="dimen">0.3</item>
    +    <item name="config_screenBrightnessSettingDefaultFloat" format="float" type="dimen">0.4</item>
     </resources>
相关推荐
不爱编程的小九九7 小时前
小九源码-springboot082-java旅游攻略平台
java·开发语言·旅游
只是懒得想了7 小时前
用C++实现一个高效可扩展的行为树(Behavior Tree)框架
java·开发语言·c++·design-patterns
码农阿树7 小时前
Java 离线视频目标检测性能优化:从 Graphics2D 到 OpenCV 原生绘图的 20 倍性能提升实战
java·yolo·目标检测·音视频
夫唯不争,故无尤也7 小时前
Maven创建Java项目实战全流程
java·数据仓库·hive·hadoop·maven
weixin_404551247 小时前
openrewrite Maven plugin configuration
java·maven·configuration·openrewrite
我是华为OD~HR~栗栗呀7 小时前
华为OD-23届考研-Java面经
java·c++·后端·python·华为od·华为·面试
yan8626592467 小时前
于 C++ 的虚函数多态 和 模板方法模式 的结合
java·开发语言·算法
Le1Yu7 小时前
服务注册、服务发现、OpenFeign及其OKHttp连接池实现
java·服务器
想ai抽7 小时前
深入starrocks-怎样实现多列联合统计信息
java·数据库·数据仓库
shepherd1117 小时前
⏰ 一招鲜吃遍天!详解Java延时队列DelayQueue,从此延时任务不再难!
java·后端·消息队列