Modifique el código fuente del sistema Android10 para que el teléfono nunca duerma

1. Análisis simple del entorno nunca duerme

En la aplicación " Configuración " de los teléfonos Android, puede establecer el período de tiempo de espera de la pantalla del teléfono. Como se muestra en la siguiente figura: imagenA través de las opciones, puede ver que se puede configurar hasta 30 minutos. Si necesita no dormir nunca, puede lograr el objetivo configurando el tiempo de espera de la pantalla lo suficientemente grande, como el valor máximo de Int. A continuación, rastree cómo se implementa en la aplicación "Configuración" en el código fuente. La ruta de origen de la aplicación "Configuración" en el código fuente es la siguiente:

packages/apps/Settings

Mediante la búsqueda de palabras clave y el análisis del directorio, el archivo de origen para configurar el tiempo de espera de la pantalla se encuentra de la siguiente manera:

packages/apps/Settings/src/com/android/settings/display/TimeoutPreferenceController.java

Las funciones clave para modificar el tiempo de espera de la pantalla en " TimeoutPreferenceController.java " son las siguientes:

 @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;
    }

En el código, puede ver que el tiempo de espera de la pantalla se modifica con el siguiente código:

Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT, 6000);

Lo siguiente agregará una función de "nunca dormir" al tiempo de espera de la pantalla en la aplicación de configuración.

2. Documentos involucrados en la modificación

//添加永不休眠以及时间选项
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

Tres, modifica el combate real

1. Agregue la opción de no dormir nunca en la aplicación de configuración

agregue el siguiente contenido a 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 agregue el siguiente contenido:

<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. Modifique el tiempo de suspensión establecido en el archivo Settings.java

Busque el método Settings.System.putInt en el archivo y modifique el código del método asociado de la siguiente manera:

//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);
      }

Cuatro, pantalla de efectos

Después de la modificación, compilación y flash de la máquina, probé la máquina y colgué durante un día sin dormir. Mostrar imágenes:

imagen

 

Desarrollo personalizado del kernel del código fuente del sistema Android10 desde la entrada hasta el pozo

Cómo utilizar el marco de gancho de EdXposed ART

Use el comando adb para instalar Edxposed sin Magisk

Modificación de desarrollo personalizado del sistema Android10 código fuente de Android cerrar selinux

 

Los grandes mantienen una preocupación antes de irse, y continúan los maravillosos artículos de seguimiento.imagen

imagen

Supongo que te gusta

Origin blog.csdn.net/u011426115/article/details/112689536
Recomendado
Clasificación