Pregunta

Tengo una aplicación de Android que ejecuta un servicio en primer plano y, mientras ese servicio se ejecuta, me gustaría darle al usuario la opción de mantener la pantalla encendida.

Agregué a mis preferencias de configuración, una preferencia de casilla de verificación y, si es cierto, me gustaría mantener la pantalla encendida, pero tengo que desactivarlo de forma predeterminada. Es algo que mis usuarios han pedido. Actualmente tengo la preferencia, pero cuando ejecuto el servicio, mi pantalla todavía se cierra aquí es lo que he hecho

variable global

private static final String PREFS_DEVICE = "DeviceInfo";

Código e IF Declaración

SharedPreferences settings = getSharedPreferences(PREFS_DEVICE, 0);
            if(settings.getBoolean("screenPref", false)) {
                final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
                this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
                this.mWakeLock.acquire();
            }

Y luego agregué esto a mi manifiesto

<uses-permission android:name="android.permission.WAKE_LOCK" />

¿Hay algo que estoy haciendo mal? ¿Hay una forma diferente de hacer esto desde un servicio o simplemente no es posible en un servicio (espero que ese no sea el caso)?

¿Fue útil?

Solución

Prueba esto:

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,         
                            "");    
mWakeLock.acquire();

Otros consejos

Puede usar Flag Flag_Keep_Screen_on

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Y cuando no quieres seguir

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

De esta manera es mucho mejor, porque de usar Menos permisos, servicios y batería de OFC:

public void setWakelock(Activity Target, boolean State)
{
    if (State) Target.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    else Target.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    return;
}

Editado

Siga el patrón que Mark Murphy proporciona con el WakefulfulFinInservice. y puedes encontrar la explicación en su libro muy buena

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top