¿Cómo evito que un dispositivo Android se suspenda mediante programación?
Una opción es usar un bloqueo de activación . Ejemplo de los documentos:
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();
También hay una tabla en esta página que describe los diferentes tipos de wakelocks.
Tenga en cuenta que se debe tener precaución al usar las cerraduras de activación. Asegúrate de tener siempre release()
la cerradura cuando hayas terminado con ella (o no en primer plano). De lo contrario, su aplicación puede causar un serio desgaste de la batería y el uso de la CPU.
La documentación también contiene una página útil que describe diferentes enfoques para mantener un dispositivo despierto y cuándo puede elegir usar uno. Si "evitar que el dispositivo se vaya a dormir" solo se refiere a la pantalla (y no mantiene activa la CPU), entonces un bloqueo de activación es probablemente más de lo que necesita.
También debe asegurarse de tener el permiso WAKE_LOCK establecido en su manifiesto para poder utilizar este método.
Si solo desea evitar el modo de suspensión en un modo específico
View
, simplemente invoquesetKeepScreenOn(true)
esoView
o configure lakeepScreenOn
propiedad entrue
. Esto evitará que la pantalla se apague mientrasView
está en la pantalla. No se requiere un permiso especial para esto.fuente
setKeepScreenOn(true)
tendrá efecto cuandoView
sea visible.Encontré otra solución de trabajo: agregue la siguiente línea a su aplicación en el evento onCreate.
Mi proyecto de muestra de Cordova se ve así:
Después de eso, mi aplicación no se iría a dormir mientras estaba abierta. Gracias por la respuesta a xSus.
fuente
android:keepScreenOn="true"
podría ser una mejor opción para tener desde el diseño XML.Más información: https://developer.android.com/training/scheduling/wakelock.html
fuente
Establecer banderas en la ventana de la actividad como a continuación
fuente
Desde el shell raíz (por ejemplo, adb shell), puede bloquear con:
Después de lo cual el dispositivo permanecerá despierto, hasta que lo haga:
Con la misma cadena para 'mylockname'.
Tenga en cuenta que esto no evitará que la pantalla se ponga negra, pero evitará que la CPU se suspenda.
Tenga en cuenta que / sys / power / wake_lock es lectura-escritura para la radio de usuario (1001) y el sistema de grupo (1000) y, por supuesto, la raíz.
Una referencia está aquí: http://lwn.net/Articles/479841/
fuente
Lo que @eldarerathis dijo que es correcto en todos los aspectos, el bloqueo de activación es la forma correcta de evitar que el dispositivo se vaya a dormir.
No sé qué necesita hacer su aplicación, pero es muy importante que piense en cómo diseñar su aplicación para que no obligue al teléfono a permanecer despierto durante más tiempo que necesita, o la vida útil de la batería se verá enormemente afectada.
Le diría a este muy buen ejemplo sobre cómo usar
AlarmManager
para disparar eventos y despertar el teléfono y (su aplicación) para realizar lo que necesita hacer y luego volver a dormir: Administrador de alarmas (fuente: commonsware.com)fuente
Si eres un usuario de Xamarin, esta es la solución:
fuente