2011-12-09 10 views
12

Deseo enviar el dispositivo a modo de suspensión o apagar la pantalla. He investigado y encontrado este tema: Turn off screen on AndroidCómo apagar la pantalla o enviar el dispositivo a modo de suspensión

Básicamente, el son tres maneras de hacerlo, pero no he encontrado problemas para los tres:

a) Opción 1:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
manager.goToSleep(int amountOfTime); 

Problema : Causa FC. He leído que necesito DEVICE_POWER permisos, pero no se puede otorgar para aplicaciones normales.

b) Opción 2:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); 
wl.acquire(); 
wl.release(); 

Problema: Esto no funciona para mí. No sé por qué. No me da un FC, pero es inofensivo.

c) Opción 3:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 

Problema: puedo conseguir que funcione, pero cuando intente encender el dispositivo que hace cosas extrañas, como no me gusta volver, o si mis aplicaciones está al frente, automáticamente se va a dormir justo después de presionar el botón. Esto se parece más a una sugerencia o solución alternativa que la solución normal.

¿Alguien me puede decir algún buen método para enviar el dispositivo a dormir o apagar la pantalla que se puede ejecutar sin problemas? Me parece raro que una funcionalidad simple como esta no sea una buena forma de usarla (o al menos esté bien documentada)

Respuesta

7

Me respondo. Es posible apagar el dispositivo, pero la aplicación tiene que implementar la función de administrador del dispositivo a través de API: Device Administration

En esta API hay una función locknow() que hace lo que quiero.

De todos modos, esto es para extender el hardware de Android y las características de seguridad y es muy poco probable que alguien quiera controlar el dispositivo de esa manera.

Lo que quería es la capacidad de bloquear el dispositivo de un simple gesto. Como no quiero crear mi propia clase de administrador de dispositivos, compruebo si la aplicación gratuita "lockScreen" está instalada y la ejecuto. Es un atajo y una manera fácil de hacer lo que quiero. Esta aplicación debe registrarse como administrador de dispositivos, por lo que ha implementado esta clase. Es posible obtenerlo gratis del mercado.

+0

¿Qué pasa si yo quiero que apagar la pantalla y se bloquea hasta que mis tiempos de bloqueo de pantalla a cabo? –

0

Mi aplicación ya lo hace muy bien, he encontrado esto en mi PowerManager.class

/** 
* Force the device to go to sleep. Overrides all the wake locks that are 
* held. 
* 
* @param time is used to order this correctly with the wake lock calls. 
*   The time should be in the {@link SystemClock#uptimeMillis 
*   SystemClock.uptimeMillis()} time base. 
*/ 
public void goToSleep(long time) 
{ 
    try { 
     mService.goToSleep(time); 
    } catch (RemoteException e) { 
    } 
} 
+0

¿Estás seguro de que no acabas de atrapar la implementación de la clase PowerManager de la API? No uso este método porque no puedo obtener los permisos necesarios. –

+1

¿Qué pasa con el permiso 'DEVICE_POWER'? –

Cuestiones relacionadas