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: A 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:
Cómo utilizar el marco de gancho de EdXposed ART
Use el comando adb para instalar Edxposed sin Magisk
Los grandes mantienen una preocupación antes de irse, y continúan los maravillosos artículos de seguimiento.