MTK-Android12-13 修改默认息屏时间

概要:一个简单的需求,MTK平台下修改屏幕默认休眠时间


需求:修改屏幕超时时间

系统设置界面如下:

在这里插入图片描述

修改文件

路径:\vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml 

修改属性 def_screen_off_timeout

比如,如果需要默认息屏时间 30 分钟,则配置如下:

<integer name="def_screen_off_timeout">1800000</integer>


参考资料

屏幕超时休眠
Android源码修改或添加SettingsProvider的默认值

源码分析

设置->显示->屏幕超时
进入测试界面,能够发现如下日志:

com.android.settings                 D  Switching to fragment com.android.settings.display.ScreenTimeoutSettings
com.android.settings                 D  Launching fragment com.android.settings.display.ScreenTimeoutSettings

源码搜索这个ScreenTimeoutSettings 实际路径:

实际路径:
/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/display/ScreenTimeoutSettings.java

ScreenTimeoutSettings 源码解析

获取设置当前息屏时间 getCurrentSystemScreenTimeout setCurrentSystemScreenTimeout

从源码看到这两个方法,实际源码如下:
在这里插入图片描述

看到关键属性 SCREEN_OFF_TIMEOUT

android.provider.Settings.System.SCREEN_OFF_TIMEOUT

那追踪这个Settings.java 里面的 SCREEN_OFF_TIMEOUT

源码路径:

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

在这里插入图片描述

从 getCurrentSystemScreenTimeout setCurrentSystemScreenTimeout 方法,追踪到了 SCREEN_OFF_TIMEOUT 属性值,设置和获取当前息屏时间其实就是通过这个是属性来的

息屏时间属性 SCREEN_OFF_TIMEOUT

实际路径上面已经分析了,我们看看在哪里赋值的
路径:
\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DataBaseHelper.java

    private void loadSystemSettings(SQLiteDatabase db) {
        SQLiteStatement stmt = null;
        try {
            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
                    + " VALUES(?,?);");

           
            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
                    R.integer.def_screen_off_timeout);
。。。。。。。。。。。

}

哈哈哈,这个时候默认的值不就是 def_screen_off_timeout 属性的值吗? 这就是为什么我们修改 def_screen_off_timeout 配置属性的值就能满足需求了。

在这里插入图片描述

获取UI资源 getPreferenceScreenResId

看着像加载列表数据的
在这里插入图片描述

继续追踪代码, 这个 screen_timeout_settings

继续追踪 PreferenceScreen
路径:

 /frameworks/base/core/java/android/preference/PreferenceScreen.java

其实就是一个带adapter 的 UI 组件

在这里插入图片描述

加载数据 onAttach

  @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mContext = context;
        mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
        mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
.....
}
数据配置 screen_timeout_entries
    <!-- Display settings.  The delay in inactivity before the screen is turned off. These are shown in a list dialog. -->
    <string-array name="screen_timeout_entries">
        <item>15 seconds</item>
        <item>30 seconds</item>
        <item>1 minute</item>
        <item>2 minutes</item>
        <item>5 minutes</item>
        <item>10 minutes</item>
        <item>30 minutes</item>
    </string-array>

这里不就是界面加载数据的数据值嘛…

总结

  • 实现需求很简单的,找到对应配置即可
  • 如果需要了解实现业务、逻辑,还需要进一步看一看代码流程和代码思路,在代码里面找答案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值