2011-07-05 5 views
7

Estoy trabajando en Android 3.0 y necesito saber en mi aplicación cuando el dispositivo se apaga/apaga la pantalla.¿Cómo registrarse para dormir el evento en Android?

¿Cómo me puedo registrar en este intento/evento, así que podré ejecutar algunas acciones cuando esto ocurra? ¿Hay alguna acción en BroadcastReceiver que notifique esto?

+1

@Yaniv: "Necesito saber en mi solicitud cuando el dispositivo entra en el sueño/apagar la pantalla. " -- ¿por qué? El 99.999% de las aplicaciones de Android no necesitan esto. La única manera de hacerlo es asumir un comportamiento hostil para el usuario (por ejemplo, un servicio que se ejecuta constantemente). Por lo tanto, explique qué está tratando de lograr, para que podamos ayudarlo a encontrar una mejor solución. – CommonsWare

Respuesta

13

This página tiene un tutorial sobre exactamente lo que estás buscando.

código copiado de esa página (con el fin de convertir esto desde un enlace de sólo responder a algo de utilidad directa):

1) Crear una clase en su solicitud para recibir la intención. Por ejemplo, el siguiente receptor se encuentra solo y establece una variable estática para ser utilizado en la parte 2:

2) Modificar la actividad para recibir pantalla de eventos/OFF. Su receptor comprobará la variable estática de su receptor de radio para saber el motivo de la intención que acaba de recibir:

public class ExampleActivity extends Activity { 
    @Override 
    protected void onCreate() { 
     // initialize receiver 
     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
     filter.addAction(Intent.ACTION_SCREEN_OFF); 
     BroadcastReceiver mReceiver = new ScreenReceiver(); 
     registerReceiver(mReceiver, filter); 
     // your code 
    } 

    @Override 
    protected void onPause() { 
     // when the screen is about to turn off 
     if (ScreenReceiver.wasScreenOn) { 
      // this is the case when onPause() is called by the system due to a screen state change 
      System.out.println("SCREEN TURNED OFF"); 
     } else { 
      // this is when onPause() is called when the screen state has not changed 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // only when screen turns on 
     if (!ScreenReceiver.wasScreenOn) { 
      // this is when onResume() is called due to a screen state change 
      System.out.println("SCREEN TURNED ON"); 
     } else { 
      // this is when onResume() is called when the screen state has not changed 
     } 
     super.onResume(); 
    } 
} 
+4

¿es posible diferenciar entre dormir manualmente (hecho por el usuario, presionando el botón de encendido) y dormir automáticamente (después de X minutos)? –

Cuestiones relacionadas