2012-09-15 9 views
9

estoy desarrollando pantalla de bloqueo donde quiero desactivar el botón Inicio en sándwich de helado y de la haba de jalea, puedo bloquearlo mediante los métodos siguientes en Android 2.2, 2.3bloque botón Inicio en sándwich de helado y caramelo de goma

@Override 
public void onAttachedToWindow() { 
    // TODO Auto-generate method stub 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
} 

también probamos este

getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 

Aquí yo también no estoy recibiendo información del evento a través de Método o onKeyDown

Pero éstos se reunieron No funcionó para mí en ICS, Jelly Bean si hay algún método que pueda reemplazarlo, déjame saber

Respuesta

14

Publicar ICS, es decir, Android 4+, la anulación del HomeButton se ha eliminado por razones de seguridad, para habilitar el usuario sale en caso de que la aplicación resulte ser un malware.

Además, no es una buena práctica dejar que el usuario se aparte de la aplicación. Pero, como está haciendo una aplicación de bloqueo de pantalla, lo que puede hacer es declarar la actividad como Launcher, de modo que cuando presione HomeButton simplemente reinicie su aplicación y permanezca ahí (los usuarios no notarían nada más que un ligero parpadeo en la pantalla).

EDIT # 1: Aquí está another workaround, más adecuado a sus necesidades.

EDIT # 2: Acaba de encontrar this. No lo he probado. Pero parece un poco prometedor. No estoy seguro de si funcionaría, pero podría intentarlo.

+1

totalmente de acuerdo con @ swayam – dhams

+1

@Swayam, declarar la actividad como iniciador pedirá al usuario que elija el iniciador predeterminado, y luego también arruinará las configuraciones del iniciador. –

+0

Estoy de acuerdo con usted en que se le pedirá al usuario que elija. Pero, solo necesita hacer la elección una vez y se guarda como su preferencia.Esa es una suposición que tendríamos que hacer, especialmente teniendo en cuenta el hecho de que el usuario querría que la aplicación de la pantalla de bloqueo funcionara como se esperaba. Y, en lo que se refiere a * "estropear las configuraciones del lanzador" *, ¿podrían explicarlo mejor, porque nunca me he encontrado con ese problema? – Swayam

9

Hay algunas cosas que usted puede intentar:

  • usted puede configurar su actividad única parte superior, y empezar de nuevo con clara a la parte superior de la bandera cuando se llama onPause() método, lo que bloquearía el botón de inicio y abriendo otras actividades.

  • Escucha la emisión BOOT_COMPLETED para comenzar tu actividad: esto te protegerá de los usuarios que sacarán la batería del dispositivo para reiniciarlo.

  • Agregue Alarmmanager que probará cada segundo si su aplicación está activa y si no lo está, entonces iníciela - Esto lo protegerá de los usuarios que de alguna manera lograron cerrar su aplicación (puede ser con herramientas externas).

hacer esto y nadie ser capaces de salir de la aplicación.

+0

¡Estos son algunos de los puntos maravillosos que hay! Había usado la emisión Boot_completed en una de mis aplicaciones, ¡pero usar 'AlarmManager' es puro genio! +1 !! – Swayam

+1

Probé el primero, no funcionaba para mí ... :(@llya_Gazman –

1

Creo que es imposible detectar y/o interceptar el botón INICIO desde dentro de una aplicación de Android. Esto está integrado en el sistema para evitar aplicaciones maliciosas que no pueden salir.

Cuestiones relacionadas