Respuestas:
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 invoque setKeepScreenOn(true)eso Viewo configure la keepScreenOnpropiedad en true. Esto evitará que la pantalla se apague mientras Viewestá en la pantalla. No se requiere un permiso especial para esto.
setKeepScreenOn(true)tendrá efecto cuando Viewsea visible.
Encontré otra solución de trabajo: agregue la siguiente línea a su aplicación en el evento onCreate.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Mi proyecto de muestra de Cordova se ve así:
package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;
public class ScanManActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
super.loadUrl("http://stackoverflow.com");
}
}
Después de eso, mi aplicación no se iría a dormir mientras estaba abierta. Gracias por la respuesta a xSus.
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
Establecer banderas en la ventana de la actividad como a continuación
@Override public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Desde el shell raíz (por ejemplo, adb shell), puede bloquear con:
echo mylockname >/sys/power/wake_lock
Después de lo cual el dispositivo permanecerá despierto, hasta que lo haga:
echo mylockname >/sys/power/wake_unlock
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/
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 AlarmManagerpara 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)