Android Framework修改Settings省电模式默认值

文章目录

安卓省电模式是安卓系统为延长手机续航时间而设计的功能,通过限制一些耗电较大的功能和进程来降低电池能耗。安卓充电时自动关闭省电模式。

安卓充电时自动关闭省电模式

安卓充电时自动关闭省电模式是系统的一种默认设置,主要有以下原因和原理:

设计逻辑

充电时,手机连接到外部电源,不再依赖电池供电,此时开启省电模式的意义不大。而且,用户在充电时可能会使用手机,关闭省电模式可以提供更好的性能和使用体验,例如保证屏幕亮度、处理器性能等不受限制,让应用运行更加流畅,避免因省电模式的限制而影响使用。

电量检测

当手机检测到充电器连接时,会触发相应的电源管理机制。系统通过检测充电电流、电压等信号,判断手机是否处于充电状态。一旦确定正在充电,就会自动关闭省电模式,使手机恢复到正常的性能状态。

不同的安卓手机厂商可能会对省电模式及充电时的相关设置进行定制,例如一些手机可以设置在充电至一定电量后才自动关闭省电模式,如真我手机可设置充电至 90% 后自动关闭省电模式。小米、红米手机可以在设置中点击【电池与性能】-【设置】-【超级省电】,选择 "充电后自动关闭" 功能来控制充电时是否自动退出超级省电模式

代码定位

UI界面

设置中位置,可以开启或关闭省电模式,且省电模式时是否开启"充电时关闭"省电模式。

系统中对应的值

修改这个配置项,会相应改变Settings Global中的low_power_sticky_auto_disable_enabled值

默认情况搜索不到值,如下图

把充电时关闭这个开关关闭后,值就变了,如下图

代码

此开关对应代码

frameworks/base/core/java/android/provider/Settings.java

java 复制代码
        /**
         * Whether sticky battery saver should be deactivated once the battery level has reached the
         * threshold specified by {@link #LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL}.
         *
         * @hide
         */
        public static final String LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED =
                "low_power_sticky_auto_disable_enabled";
  1. frameworks/base/packages/SettingsProvider/res/values/defaults.xml
    设置默认值到defaults.xml
xml 复制代码
<integer name="def_low_power_sticky_auto_disable_enabled">0</integer>
  1. frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
    加载默认值的代码
java 复制代码
            loadIntegerSetting(stmt, Settings.Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED,
                    R.integer.def_low_power_sticky_auto_disable_enabled);
  1. frameworks/base/services/core/java/com/android/server/power/batterysaver
    如果low_power_sticky_auto_disable_enabled没有设置,默认会设置为1的
java 复制代码
    @GuardedBy("mLock")
    private void refreshSettingsLocked() {
        final boolean lowPowerModeEnabled = getGlobalSetting(
                Settings.Global.LOW_POWER_MODE, 0) != 0;
        final boolean lowPowerModeEnabledSticky = getGlobalSetting(
                Settings.Global.LOW_POWER_MODE_STICKY, 0) != 0;
        final boolean dynamicPowerSavingsBatterySaver = getGlobalSetting(
                Settings.Global.DYNAMIC_POWER_SAVINGS_ENABLED, 0) != 0;
        final int lowPowerModeTriggerLevel = getGlobalSetting(
                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
        final int automaticBatterySaverMode = getGlobalSetting(
                Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
                PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
        final int dynamicPowerSavingsDisableThreshold = getGlobalSetting(
                Settings.Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD,
                mDynamicPowerSavingsDefaultDisableThreshold);
        // 注意下面这行,其实是把默认值1写入了
        final boolean isStickyAutoDisableEnabled = getGlobalSetting(
                Settings.Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 1) != 0;
        final int stickyAutoDisableThreshold = getGlobalSetting(
                Settings.Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, 90);

        setSettingsLocked(lowPowerModeEnabled, lowPowerModeEnabledSticky,
                lowPowerModeTriggerLevel,
                isStickyAutoDisableEnabled, stickyAutoDisableThreshold,
                automaticBatterySaverMode,
                dynamicPowerSavingsBatterySaver, dynamicPowerSavingsDisableThreshold);
    }

在另外一个文件也有,如果不存在则默认会读取为1

  1. packages/apps/Settings/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java
java 复制代码
    @Override
    public boolean isChecked() {
        return Settings.Global.getInt(mContext.getContentResolver(),
            Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 1) == 1;
    }

Android相关专栏

Android Framework专栏
Android专栏

作者:帅得不敢出门

相关推荐
拥小抱12 小时前
Compose 知识点
android
文章永久免费只为良心12 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_868912 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港14 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA16 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
booboosui17 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng17 小时前
Android获取崩溃日志
android
aqi0017 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-9318 小时前
【Android】Android Studio 中的协程
android