其他
修改Android10系统源码支持手机永不休眠
The following article is from 卓码空间 Author QDroid88888
一、设置永不休眠简单分析
安卓手机中"设置"应用里面可以设置手机屏幕超时时间。如下图所示:
packages/apps/Settings
通过对该目录关键字搜索和分析,找到设置屏幕超时的源码文件如下:
packages/apps/Settings/src/com/android/settings/display/TimeoutPreferenceController.java
"TimeoutPreferenceController.java"中修改屏幕超时的关键函数如下:
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
try {
int value = Integer.parseInt((String) newValue);
//最终是调用这个函数实现的
Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value);
updateTimeoutPreferenceDescription((TimeoutListPreference) preference, value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist screen timeout setting", e);
}
return true;
}
从代码中可以看到通过以下代码修改屏幕超时时间:
Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT, 6000);
以下将在设置应用中的屏幕超时中添加一个"永不休眠"的功能。
二、涉及修改的文件
//添加永不休眠以及时间选项
packages/apps/Settings/res/values/arrays.xml
//添加中文展示的永不休眠选项
packages/apps/Settings/res/values/values-zh-rCN/arrays.xml
//Settings.System.putInt方法的实现类,根据传入的特殊值-1修改为一个很大的休眠时间
/frameworks/base/core/java/android/provider/Settings.java
三、修改实战
1.设置应用中添加永不休眠选项
packages/apps/Settings/res/values/arrays.xml添加如下内容:
<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>
<!-- ///ADD START 此处新增的英文语言下Never展示项-->
<item>Never</item>
<!-- ///ADD END -->
</string-array>
<!-- Do not translate. -->
<string-array name="screen_timeout_values" translatable="false">
<!-- Do not translate. -->
<item>15000</item>
<!-- Do not translate. -->
<item>30000</item>
<!-- Do not translate. -->
<item>60000</item>
<!-- Do not translate. -->
<item>120000</item>
<!-- Do not translate. -->
<item>300000</item>
<!-- Do not translate. -->
<item>600000</item>
<!-- Do not translate. -->
<item>1800000</item>
<!-- ///ADD START 此处新增的休眠时间-1-->
<item>-1</item>
<!-- ///ADD END -->
</string-array>
packages/apps/Settings/res/values/values-zh-rCN/arrays.xml添加如下内容:
<string-array name="screen_timeout_entries">
<item msgid="8386012403457852396">"15 秒"</item>
<item msgid="4572123773028439079">"30 秒"</item>
<item msgid="7016081293774377048">"1 分钟"</item>
<item msgid="838575533670111144">"2 分钟"</item>
<item msgid="2693197579676214668">"5 分钟"</item>
<item msgid="1955784331962974678">"10 分钟"</item>
<item msgid="5578717731965793584">"30 分钟"</item>
<!-- ///ADD START 此处新增的中文语言展示选择项-->
<item>永不睡觉</item>
<!-- ///ADD END -->
</string-array>
2.Settings.java文件中修改设置的休眠时间
在该文件中找到Settings.System.putInt方法,修改关联的方法代码如下:
//putInt最终调用的是putIntForUser
public static boolean putInt(ContentResolver cr, String name, int value) {
return putIntForUser(cr, name, value, cr.getUserId());
}
//putIntForUser中根据传入的name和value特殊值-1进行修改设置
/** @hide */
@UnsupportedAppUsage
public static boolean putIntForUser(ContentResolver cr, String name, int value,int userHandle) {
///ADD START
if(name.equals(SCREEN_OFF_TIMEOUT))
{
//-1说明是我们在设置中添加的永不休眠的值
if(value==-1)
{
//
Log.d("Settings","change screen timeout for:"+Integer.toString(Integer.MAX_VALUE-1000));
return putStringForUser(cr, name, Integer.toString(Integer.MAX_VALUE-1000), userHandle);
}
}
///ADD END
return putStringForUser(cr, name, Integer.toString(value), userHandle);
}
四、效果展示
修改之后编译刷机,我本机测试了挂了一天都没休眠。展示图片:
Android10系统定制开发之修改安卓源码关闭selinux
大佬们留个关注再走呗,后续精彩文章不断