2011-11-09 4 views
6

Tengo una aplicación que debería ser segura para niños pequeños. Lo que significa que bloquea cualquier toque de una sola tecla, pero maneja la presión prolongada para salir de la aplicación. Esto es para que el niño pequeño esté a salvo de hacer (demasiado) cosas desagradables mientras juega. Hasta la versión 2.3.4, logré esto. Sin embargo, ahora tengo 2 problemas:aplicación segura para niños en Android

  1. en el panal, tengo las notificaciones de la barra de estado que puede ser presionado sobre. Además, tengo la tecla de cambio de ventanas que se puede presionar. Lo único que logré con esto es atenuar la barra de estado.
  2. En sándwich de helado (con emulador, todavía no tengo un dispositivo real con esta versión), cuando llamo al siguiente código, recibo una excepción que ni siquiera se puede atrapar. la excepción:

    java.lang.IllegalArgumentException: El tipo de ventana no se puede cambiar después de agregar la ventana.

el código:

@Override 
public void onAttachedToWindow() 
    { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    super.onAttachedToWindow(); 
    } 

¿Qué puedo hacer yo?

+0

¿Cómo estás bloqueando las prensas de la tecla de inicio? – slayton

+0

@slayton ¿has probado lo que acabo de escribir? está escrito en la clase de actividad. –

+0

@androiddeveloper también recibo el mismo error en mi aplicación y también estoy usando el mismo código en AtchedTowindow() ... ¿cómo resolvió este problema? –

Respuesta

2

para la versión 4 de Android (API 14 en adelante), es posible utilizar: getWindow(). SetType (WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

Sin embargo, en el emulador, no bloquea el botón de inicio, por lo que es un poco inútil. aún no sé si funciona bien en dispositivos reales.

quizás es posible utilizar la siguiente solución: configure la aplicación como la aplicación de pantalla de inicio predeterminada. si se presionó el botón de inicio mientras la aplicación estaba activa, captúrelo y no haga nada. si se presionó el botón de inicio mientras la aplicación estaba en segundo plano (o cerrada), abra la aplicación de inicio predeterminada seleccionada anteriormente.

Como alternativa, podría pedirle al usuario que configure la aplicación de inicio predeterminada como la mía cada vez que se inicie, y restablecerla de nuevo (ya sea a la anterior, o al reinicio total) después de que se cierre.

¿es posible? si es así, ¿cómo?


Desde Android Lollipop (versión 5.0, que es API 21), hay una forma de la pantalla-pinning, y esto se puede activar por el usuario o la aplicación (enlace here):

Hay dos formas de activar la fijación de pantalla:

manualmente: los usuarios pueden habilitar fijar pantalla en Ajustes> Seguridad> fijar pantalla, y seleccionar las tareas que desea anclar tocando el icono de contacto verde en la pantalla recientes al. Programado: para activar la fijación de la pantalla mediante programación, llame a startLockTask() desde su aplicación. Si la aplicación solicitante no es propietaria del dispositivo, se solicita al usuario la confirmación . Una aplicación de propietario de dispositivo puede llamar al método setLockTaskPackages() para permitir que las aplicaciones se puedan pintar sin la confirmación del usuario paso.

¿Qué hace? leer más y ver:

Cuando bloqueo tarea es activa, el siguiente comportamiento sucede:

La barra de estado está en blanco, y las notificaciones de usuario e información de estado están ocultos. Los botones Inicio y Aplicaciones recientes están ocultos. Otras aplicaciones no pueden lanzar nuevas actividades. La aplicación actual puede iniciar nuevas actividades , siempre que al hacerlo no cree nuevas tareas. Cuando el titular de un dispositivo invoca la pantalla , el usuario permanece bloqueado en su aplicación hasta que la aplicación llame a stopLockTask(). Si la fijación de pantalla es actividad por otra aplicación que no es propietaria del dispositivo o por el usuario directamente, el usuario puede salir manteniendo presionados los botones Atrás y Recientes.

No sólo eso, pero de acuerdo con this post, también puede alternar este usuario sin confirmación, y salir de este estado especial estaría bajo la lógica de su aplicación.

Parece la aplicación perfecta para niños seguros.

1

Para mí debajo de código se esconde el botón de inicio en el ICS (versión 4.4.4)

public void onCreate(Bundle savedInstanceState) { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION); 
      super.onAttachedToWindow(); 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

    } 
+0

¿Cómo encontraste esta solución? –

+0

Esto funcionó para mí. –

Cuestiones relacionadas