概要:一个简单的需求,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>
这里不就是界面加载数据的数据值嘛…
总结
- 实现需求很简单的,找到对应配置即可
- 如果需要了解实现业务、逻辑,还需要进一步看一看代码流程和代码思路,在代码里面找答案