玩转Android10源码开发定制(14)修改安卓源码手机永不休眠

一、设置永不休眠简单分析

安卓手机中"设置"应用里面可以设置手机屏幕超时时间。如下图所示:

通过选项可以看到最多能设置30分钟,那如果需要永不休眠,只要把屏幕超时时间设置的足够大就可以达到目的,比如Int的最大值。接下来源码中追踪一下"设置"应用中如何实现的。
源码中"设置"应用的源码路径如下:

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进行修改设置/** home.php?mod=space&uid=1149114 */@UnsupportedAppUsagepublic static boolean putIntForUser(ContentResolver cr, String name, int value,int userHandle) {///ADD STARTif(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源码开发定制(14)修改安卓源码手机永不休眠

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员的头像-小北的自留地

    昵称

  • 取消
    昵称