安卓手机中"设置"应用里面可以设置手机屏幕超时时间。如下图所示:
通过选项可以看到最多能设置30分钟,那如果需要永不休眠,只要把屏幕超时时间设置的足够大就可以达到目的,比如Int的最大值。接下来源码中追踪一下"设置"应用中如何实现的。
源码中"设置"应用的源码路径如下:
通过对该目录关键字搜索和分析,找到设置屏幕超时的源码文件如下:
"TimeoutPreferenceController.java"中修改屏幕超时的关键函数如下:
从代码中可以看到通过以下代码修改屏幕超时时间:
以下将在设置应用中的屏幕超时中添加一个"永不休眠"的功能。
packages/apps/Settings/res/values/arrays.xml添加如下内容:
packages/apps/Settings/res/values/values-zh-rCN/arrays.xml添加如下内容:
在该文件中找到Settings.System.putInt方法,修改关联的方法代码如下:
修改之后编译刷机,我本机测试了挂了一天都没休眠。
原文链接:
玩转Android10源码开发定制(14)修改安卓源码手机永不休眠
packages
/
apps
/
Settings
packages
/
apps
/
Settings
/
src
/
com
/
android
/
settings
/
display
/
TimeoutPreferenceController.java
packages
/
apps
/
Settings
/
src
/
com
/
android
/
settings
/
display
/
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;
}
@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
);
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
/
/
添加永不休眠以及时间选项
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
<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>
<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.
-
-
>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-4-12 22:03
被蟑螂一号编辑
,原因: