2010-12-04 16 views
7

Como puede adivinar, registro una alarma mediante AlarmManager. Y el BroadcastReceiver se llamará correctamente. Pero cuando llamó, la pantalla de mi teléfono todavía está bloqueada. Noto que la aplicación predeterminada de AlarmClock no es así. Entonces mi pregunta es, ¿cómo desbloquear la pantalla cuando se llama al BroadcastReceiver? (Desbloquear la pantalla puede hacer que el usuario opere mi actividad directamente) Gracias de antemano.cómo desbloquear la pantalla cuando se llama a BroadcastReceiver?

Respuesta

8

El código fuente de la alarma está en el código fuente de Android. AlarmClock se ha ido, pero ha sido reemplazado por DeskClock. Source code is here. Eché un vistazo al código muy rápido, y su receptor parece usar el KeyguardManager. Mira los documentos, que parece ser lo que quieres.

EDIT: voy a agregar sus conclusiones aquí. Este código debería hacer:

final Window win = getWindow(); 
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
       | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
       | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
+0

Gracias, voy a leer el código fuente que introduzca aquí. De hecho, he buscado algunos códigos anteriormente, pero por alguna razón, no puedo obtener el código fuente predeterminado de AlarmClock. –

+0

Sí, porque ha sido eliminado. El nuevo hotness es "DeskClock". En cualquier caso, solo eche un vistazo rápido a los documentos de KeyguardManager (me vinculé a él) y vea si eso es lo que necesita. – EboMike

+0

Eché un vistazo al documento 'KeyguardManager', y como dice: "Clase que se puede usar para bloquear y desbloquear el teclado", supongo que eso es lo que necesito. Pero la API parece no muy directa. Necesito algo de tiempo para probarlo. Gracias de cualquier manera. –

0

Abra la Actividad A que desea iniciar desde onReceive (...). Pega esto en onCreate() de dicho Actividad A

 final Window win= getWindow(); 
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
       WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
       WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

Asegúrese de que no está pegando antes setContentView (....) :)

Cuestiones relacionadas