¿Deshabilitar el botón de inicio en la aplicación de Android para niños pequeños?

He desarrollado una aplicación que es una presentación de diapositivas de imágenes en la que cada una reproduce un sonido cuando las toca. Es como un libro ilustrado para las edades 2-4.

El problema es que, dado que Android no le permite capturar un botón de inicio y esencialmente desactivarlo, cuando los padres le dan el teléfono a sus hijos para que jueguen sin supervisión (padre valiente), el niño puede salir de la aplicación sin previo aviso y luego realizar llamadas o de lo contrario ajustar el teléfono.

Hay otras dos aplicaciones que actualmente tienen una solución de psuedo para este problema. Las aplicaciones son Toddler Lock y ToddlePhone. Intenté ponerme en contacto con los desarrolladores de estas aplicaciones para obtener alguna orientación, pero no han estado dispuestos a revelar nada, lo que está bien, pero ¿alguien aquí tiene alguna sugerencia?

Parece que las otras dos aplicaciones actúan como una aplicación de reemplazo de pantalla de inicio. Cuando habilita el “modo a prueba de niños” en esas aplicaciones, se le solicita al usuario que elija y la aplicación para la acción y las opciones son “Iniciador, LauncherPro, etc.” más la aplicación para niños pequeños Luego tiene que hacer que la aplicación para niños pequeños sea la predeterminada y listo, el teléfono está “bloqueado” y solo se puede “desbloquear” usando una combinación de teclas o tocando las cuatro esquinas de la pantalla, etc., cuando “desbloquea” el teléfono. la aplicación de pantalla de inicio normal está restaurada por defecto. Ni siquiera tiene que hacer que la aplicación para niños pequeños sea la predeterminada la próxima vez que active el “modo a prueba de niños”.

He leído que estas dos aplicaciones tienen problemas con los teléfonos Samsung y que pueden causar un ciclo infinito de locking y reinicio que requiere un restablecimiento de fábrica para solucionarlo. Obviamente, esta no es la solución ideal para el problema, pero parece ser la única disponible en este momento.

¿Alguien tiene alguna idea sobre cómo implementar un “modo a prueba de niños”?

Creo que tienes razón con respecto al reemplazo de la pantalla de inicio. Toddler Lock Sé que no anula el botón de inicio, porque (al menos en mi LG GW620), mientras está en Toddle Lock presionando el botón de inicio aparece el menú de tipo ALT-TAB, que tiende a colgar el teléfono.

Hay una aplicación de reemplazo de pantalla de inicio disponible, con código fuente, en el sitio de desarrollo de Android:

http://developer.android.com/resources/samples/Home/index.html

EDITAR: también, ADW.Launcher:

http://code.google.com/p/adw-launcher-android/

Necesitaba bloquear a un niño pequeño en una nueva aplicación, y no quería usar un iniciador. Esto es lo que hice, puedes ver la aplicación en https://play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. Cuando el locking está activado, inicie un servicio y deténgalo cuando el locking esté desactivado.
  2. El servicio comprueba la aplicación que se ejecuta en la parte superior y, si no es mi actividad, el servicio inicia mi actividad
  3. Todavía hay un problema que cuando el usuario hace clic en “inicio”, transcurren aproximadamente 6 segundos antes de que mi actividad se inicie de nuevo. Supongo que esta es una característica de seguridad en Android pero no estoy seguro. Para omitir esto, cuando el servicio detecta que otra aplicación está visible, agrega una vista superior (como una ventana de alerta) que cubre la pantalla de inicio durante los pocos segundos que tarda la aplicación en volver a iniciarse.

Para el paso 3, aquí hay más detalles:

Cree el diseño de superposición, por ejemplo, archivo locked_overlay.xml:

      

En su servicio para mostrar u ocultar el uso de superposición:

  private View lockedOverlay = null; private void hideLockedOverlay() { if (lockedOverlay != null) { WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); windowManager.removeView(lockedOverlay); lockedOverlay = null; } } private void showLockedOverlay() { if (lockedOverlay != null) { return; } WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams viewLayoutParams = new WindowManager.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT); viewLayoutParams.gravity = Gravity.TOP | Gravity.LEFT; LayoutInflater inflater = LayoutInflater.from(this); lockedOverlay = inflater.inflate(R.layout.locked_overlay, null); windowManager.addView(lockedOverlay, viewLayoutParams); } 

Necesitarás el permiso

  
 Add in to your Main Activity @Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } And Override Key down event @Override public boolean onKeyDown(int iKeyCode, KeyEvent event) { if(iKeyCode == KeyEvent.KEYCODE_BACK || iKeyCode == KeyEvent.KEYCODE_HOME) { return true; } } 

Editar: esto funciona en todas las versiones anteriores de Android. Pero no funcionará en ICS y Jelly Bean y le dará un accidente en la aplicación

Reemplacé el iniciador Inicio predeterminado usando el siguiente código:

 Intent selector = new Intent("android.intent.action.MAIN"); selector.addCategory("android.intent.category.HOME"); selector.setComponent(new ComponentName("android","com.android.internal.app.ResolverActivity")); startActivity(selector); 

Para las versiones 4.0 y posteriores, puede evitar las restricciones de seguridad de Android y configurar su aplicación como un iniciador. Agregue esto a su archivo de manifiesto: