2010-09-25 32 views
29

Mi aplicación se inicia en el evento de acoplamiento de automóviles, quiero despertar el teléfono (hecho por el sistema) y desbloquear la pantalla cuando enchufo mi dispositivo. ¿Es posible?Cómo mostrar la actividad cuando la pantalla está bloqueada?

+1

Espero que no sea así, no me gustaría que mi teléfono desbloqueara un ytime! (Podría marcar por error ...) –

+2

Tengo la tentación de editar esto en "Cómo mostrar mi actividad cuando la pantalla está bloqueada", ya que no se puede "desbloquear" el dispositivo programáticamente en Android ... – StrikeForceZero

+2

Indeed , como explica SrikeForceZero, no puede "desbloquear" el dispositivo programáticamente. Lo que las respuestas a continuación parecen sugerir que puedes hacer es mostrar cómo puedes hacer una Actividad * interactiva * ** específica mientras que el dispositivo, en general, permanece bloqueado **. –

Respuesta

21

Use Activity.getWindow() para obtener la ventana de su actividad; utilizar Window.addFlags() para añadir cualquiera de los siguientes indicadores en WindowManager.LayoutParams que usted desea: FLAG_DISMISS_KEYGUARD, FLAG_SHOW_WHEN_LOCKED, FLAG_TURN_SCREEN_ON

Así es como el muelle de coche estándar (y del muelle del escritorio) aplicación implementa este comportamiento.

+0

genial funciona, pero estos indicadores solo están disponibles en la versión 5 de SDK y versiones posteriores :( – mishkin

+2

encontró un enfoque universal, consulte mi respuesta aquí http://stackoverflow.com/questions/3621599/wake-android-device-up/4541982#4541982 – mishkin

+0

parece que esto no funciona en ICS –

39

estoy subiendo el uso de la actividad a nivel superior

private Window wind; 
    @Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    /******block is needed to raise the application if the lock is*********/ 
    wind = this.getWindow(); 
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    /* ^^^^^^^block is needed to raise the application if the lock is*/ 
} 
+0

Gracias. Funciona perfectamente, incluso si lo coloco en OnCreate. – Cerin

+0

¿Funcionaría esto en un AlertDialog? – user1762507

+0

No lo sé. Por favor, prueba este método y cuéntanos! –

4

Usted será capaz de utilizar FLAG_DISMISS_KEYGUARD sólo para teléfonos que no tienen cerraduras de seguridad habilitados como patrón de bloqueo.

FLAG_SHOW_WHEN_LOCKED solo traerá su actividad actual en la parte superior, si el usuario intenta moverse a otra parte, tendrá que desbloquear la pantalla.

Como alternativa, puede agregar el permiso en su manifiesto:

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

Y, en su actividad en crear:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock lock = manager.newKeyguardLock("abc"); 
lock.disableKeyguard(); 
+2

método obsoleto – user1940676

4

Cuando se utiliza un patrón de bloqueo o una entrada de pasador que tenía que añadir el lo siguiente también porque la pantalla se apagó en menos de 5 segundos:

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