Pregunta

He desarrollado y aplicación que es una presentación de diapositivas de imágenes que cada uno se reproduzca un sonido cuando se les grifo. Es como un libro de imágenes para las edades de 2-4.

El problema es, ya que el androide no le permitirá capturar una prensa botón de inicio y, esencialmente, desactivarlo, cuando los padres dan el teléfono a su hijo a jugar con desatendida (padre valiente), el niño puede salir inadvertenly la aplicación y luego hacer llamadas o de otra manera modificar el teléfono.

Hay otras dos aplicaciones que actualmente tienen una solución para este problema pseudo. Las aplicaciones son para niños pequeños bloqueo y ToddlePhone. He intentado ponerse en contacto con los desarrolladores de estas aplicaciones para una cierta dirección pero no han estado dispuestos a revelar nada, que si bien, pero ¿alguien aquí tiene alguna sugerencia?

Parece que estos dos otras aplicaciones están actuando como una aplicación de reemplazo pantalla de inicio. Cuando se habilita el "modo a prueba de niños" en esas aplicaciones se solicita al usuario a elegir y aplicación para la acción y las opciones son "Launcher, LauncherPro, etc." además de la aplicación de niño. A continuación, tiene que hacer la aplicación del niño por defecto y listo, el teléfono está "bloqueado" y sólo puede ser "desbloqueado", utilizando una combinación de teclas o tocar las cuatro esquinas de la pantalla, etc. cuando "desbloquear" el teléfono. la pantalla de su casa normal predeterminado aplicación restaurado. Ni siquiera tiene que hacer la aplicación del niño pequeño defecto la próxima vez que se activa el "modo a prueba de niños".

He leído que estas dos aplicaciones tienen problemas con los teléfonos Samsung y pueden causar un accidente de un infinito-y-reinicio de circuito que requiere un reinicio de fábrica de arreglar. Obviamente, esto no es la solución ideal al problema, pero parece que el único availiable en este punto.

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

¿Fue útil?

Solución

Te pensar en lo cierto con respecto a la sustitución de la pantalla de inicio. Bloqueo niño yo sé no anula el botón de inicio, debido a que (al menos en mi LG GW620), mientras que en Toddle bloqueo sosteniendo el botón de inicio despliega el menú de tipo de ALT-TAB -. Que a su vez tiende a deteriorar el teléfono

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

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

EDIT: También, ADW.Launcher:

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

Otros consejos

necesitaba tener bloqueo de niño en una nueva aplicación, y no quería utilizar un lanzador. Esto es lo que hice, se puede ver la aplicación en https: / /play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. Cuando se activa el bloqueo, iniciar un servicio, y detenerlo cuando el bloqueo está desactivado
  2. Las comprobaciones de servicio de la aplicación en ejecución la parte superior, y si no es mi actividad, los lanzamientos de servicios mi actividad
  3. Todavía había un problema que cuando el usuario hace clic en "Inicio", que toma alrededor de 6 segundos antes de que se puso en marcha de nuevo mi actividad. Asumo que esto es una característica de seguridad en Android, pero no estoy seguro. Para anular esto, cuando los detecta de servicio que otra aplicación está visible, se añade una vista desde arriba (como una ventana de alerta) que cubre la pantalla principal para los pocos segundos que tarda la aplicación de relanzamiento.

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

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

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#d0000000"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:text="@string/app_name"
        android:textColor="#fff"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Locked mode is on"
        android:textColor="#fff"
        android:textSize="18sp" />

    </LinearLayout>

</FrameLayout>

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);
  }

Usted necesitará el permiso

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
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 de toda la versión anterior de Android. Pero no va a funcionar en el ICS y el caramelo de goma y le dará a usted se estrella en la aplicación

I reemplazó el lanzador de inicio por defecto 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 superiores se pueden evitar las restricciones de seguridad de Android y configurar su aplicación como un lanzador. Agregue esto a su archivo de manifiesto:

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

 <activity
    android:launchMode="singleInstance"
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.HOME" />
    </intent-filter>
</activity>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top