程序地带

修改Android10系统源码支持手机永不休眠


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

安卓手机中"设置"应用里面可以设置手机屏幕超时时间。如下图所示:图片通过选项可以看到最多能设置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进行修改设置
/** @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系统源码内核定制开发从入门到入坑


EdXposed ART hook框架的使用方法


免Magisk使用adb命令安装Edxposed


Android10系统定制开发之修改安卓源码关闭selinux


 


大佬们留个关注再走呗,后续精彩文章不断图片


图片


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011426115/article/details/112689536

随机推荐

【数据仓库】维度建模的优缺点

维度建模就是:按照事实表,维度表来构建数据仓库,数据集市。这种方法的最被人广泛知晓的名字就是星型模式(Star-schema)、雪...

大跃ET 阅读(100)

中provide的用法_vue 中4个级别的作用域

中provide的用法_vue 中4个级别的作用域

除了JS已有的功能外,Vue还具有自己独特的作用域级别。作用域控制可以使用哪些变量以及在何处使用。它控制它们对应用程序的不同部分的“可见性”。了解Vue提供的作用域级别之间的差异会帮助我...

偷得一寸光 阅读(169)

java开发_Java快速开发平台源码

java开发_Java快速开发平台源码

Java快速开发平台源码用户权限管理系统源码一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】友好的代码结构及注释,便于阅读及二次开发实现前后端分离&#x...

weixin_39924779 阅读(147)

如何找到jdk的安装路径

如何找到jdk的安装路径

在开始那里找到jdk然后打开文件所在位置这是快捷方式然后右键打开文件所在的位置(第三个选项)(这个截不了图)再往回退一格,就是jd...

懂懂踏 阅读(843)

使元素水平垂直居中的几种方式

使元素水平垂直居中的几种方式

使元素水平垂直居中的几种方式1.居中元素有具体宽高的情况通过绝对定位用居中元素的外边距使自己居中<!DOCTYPEhtml><htmllang="en">...

panliyou 阅读(129)

数据结构导论(第二章线性表)

数据结构导论(第二章线性表)

一、线性表的基本概念线性表的逻辑结构线性表是一种最简单、最常见的数据结构线性表是由n(n≥0)个数据元素(结点)a1,a2,a3,……an组成的有限序列。数据元素的个数n定义为表的长度。当n=0时,称...

小禾点点 阅读(829)

java学习_学习Java开发未来就业如何?

java学习_学习Java开发未来就业如何?

很多年轻人因为从事IT行业从而让自己得到经济上的独立。因此,很多想要转行的人将目光转到了IT行业,那么Java学习要花费多长时间?未来Java就业如何?下面&...

weixin_39642990 阅读(445)

iis日志分析工具_分享10个优秀的日志分析工具

iis日志分析工具_分享10个优秀的日志分析工具

在网络管理员的日常工作中,对日志文件的分析能够及时了解网络设备或应用的性能数据,以便及时发现问题并及时解决。分析日志文件的时候需要运用到日志分析工具,接下来小...

weixin_39942492 阅读(962)