¿Cómo hacer dispositivo Android siempre en modo despertar?
root android-wake-lock (7)
- Activar el modo desarrollador
- ir a opciones de desarrollador
- enciende "mantente despierto"
Después de la raíz exitosa del dispositivo. Ahora, necesito hacer que el dispositivo esté siempre en estado de activación, es decir, siempre con visibilidad de la interfaz de usuario y sin pantalla negra o con pantallas de ensueño. Para hacerlo creo que tengo que lograr lo siguiente:
- Sin bloqueo de pantalla - desactivado
- Sueño fijado en "nunca"
- Daydream puesto en "off"
Lo que encontré es todo acerca de la capa de aplicación, es decir, hay algunas aplicaciones que pueden hacer por encima de las tareas. Pero como mi dispositivo móvil está rooteado, quiero lograrlo con los archivos del sistema, de modo que incluso si algunas otras aplicaciones intentan cambiar las funcionalidades anteriores, no deberían poder hacerlo.
Así que de las Opciones de Desarrollador, lo mejor que puedes obtener son 30 minutos más o menos de "Despertar" ...
De acuerdo con this , hay algunas buenas aplicaciones que pueden anular la funcionalidad y mantener su pantalla indefinidamente:
ACTUALIZAR
Tendrá que investigar cómo está estructurado el sistema de archivos de Android y cómo funciona, luego ir y modificar sus archivos principales. No hay una manera fácil de hacer lo que necesita. La única forma es crear una aplicación de Android, que nunca tendrá un onDestroy (), y se ejecutará continuamente en segundo plano. Puedes usar un WakeLock para lograrlo.
Mira aquí cómo usar el WakeLock
Creo que necesitarás modificar el marco ... Construye framework.jar y empújalo al dispositivo.
Puede consultar este enlace para saber cómo modificar el código del marco. Modifique el código Java en framework.jar y https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-2-hacking-around/
Otra alternativa que se me ocurre es usar alguna solución MDM (gestión de dispositivos móviles) de Airwatch / SOTI / SAP Afaria que tenga API de privilegio para controlar el dispositivo.
Ok, así que después de leer su pregunta detenidamente, descubrí que no está buscando ninguna solución programática. No desea instalar una aplicación para hacer eso. Lo que desea es modificar el archivo del sistema para lograr esta funcionalidad automáticamente.
Básicamente, desea modificar el archivo que está exponiendo sus métodos a otras aplicaciones de la clase PowerManager para controlar el tiempo de suspensión y el bloqueo de activación. Dos cosas que debes saber aquí:
- El archivo del sistema que está buscando está disponible en formato jar, no en texto ni en ninguna otra forma.
- Si de alguna manera ubica ese archivo y comienza a jugar con él, terminará rompiendo la versión compilada del marco de Android y su teléfono podría tener un mal comportamiento después de eso.
Conclusión Entiendo que desea hacer algo complicado al hacer esto, pero desafortunadamente no puede hacerse de esta manera e incluso si lo hace jugando con ese archivo, todas las operaciones de su teléfono manejadas por la clase PowerManager comenzarán a jugar con usted. :)
Para evitar el modo de suspensión en una Vista específica, simplemente llame a setKeepScreenOn(true)
en esa Vista o establezca la propiedad keepScreenOn
en true.
A su vez, evitará que la pantalla se apague mientras la Vista está en la pantalla. Funciona sin requerir el permiso WAKE_LOCK (o cualquier permiso especial), que es una mejor práctica aquí.
Además, esto no obligará al teléfono a permanecer despierto fuera de la vida útil de la aplicación. Puedes encontrar ese problema con WakeLock
Puede integrar el método anterior con otro enfoque para obtener la solución completa (fuera de la capa de aplicación):
Desde el shell raíz (por ejemplo, shell adb), puede bloquear con:
echo mylockname >/sys/power/wake_lock After which the device will stay awake, until you do: echo mylockname >/sys/power/wake_unlock
Con la misma cadena para ''mylockname''.
Tenga en cuenta que esto no evitará que la pantalla se vuelva negra, pero evitará que la CPU se quede inactiva.
Tenga en cuenta que
/sys/power/wake_lock
es de lectura y escritura para la radio de usuario (1001) y el sistema de grupo (1000) y, por supuesto, root.Fuente: https://lwn.net/Articles/479841/
Fuente: https://.com/a/18968753/3125120
Si desea aumentar el tiempo de espera de la pantalla mediante el comando adb shell, siga los pasos a continuación:
Pasos
- Activar depuración USB
- Conecte el dispositivo Android a través del cable USB
- Cambiar directorio a android-sdk / platform-tools /
- En la terminal, el dispositivo está conectado usando el siguiente comando:
$ adb devices
-
$ adb shell settings put system screen_off_timeout 60000
comando de tiempo de espera de la pantalla:$ adb shell settings put system screen_off_timeout 60000
Nota
60000 = 1 minuto
Su caso de uso principal parece ser el siguiente (de su pregunta)
Incluso si algunas otras aplicaciones intentan cambiar las funcionalidades anteriores, no deberían poder hacerlo.
Puede escribir un servicio del sistema para activar PowerManager.WakeLock a intervalos regulares. ( Source )
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
Para optimizar el servicio, también puede intentar configurar el tiempo de espera de la pantalla el máximo posible a intervalos regulares para que, incluso si se modifica manualmente, se reinicie. (no está seguro de la cantidad máxima permitida, deberá verificar con prueba y error)
/**
* set screen off timeout
* @param screenOffTimeout int 0~6
*/
private void setTimeout(int screenOffTimeout) {
int time;
switch (screenOffTimeout) {
case 0:
time = 15000;
break;
case 1:
time = 30000;
break;
case 2:
time = 60000;
break;
case 3:
time = 120000;
break;
case 4:
time = 600000;
break;
case 5:
time = 1800000;
break;
default:
time = -1;
}
android.provider.Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, time);
}
( Source )