Question

J'ai développé et l'application qui est un diaporama d'images que chaque jeu un son lorsque vous les touchez. Il est comme un livre d'images pour 2-4 ans.

Le problème est, car android ne vous laissera pas capturer une pression sur le bouton d'accueil et essentiellement désactiver, lorsque les parents donnent le téléphone à leur enfant à jouer avec sans surveillance (parent courageux), l'enfant peut inadvertenly quitter l'application et faire des appels ou autrement modifier le téléphone.

Il y a deux autres applications qui ont actuellement un correctif pour ce problème psuedo. Les applications sont Toddler Lock et ToddlePhone. Je l'ai essayé de contacter les développeurs de ces applications pour quelques conseils, mais ils ne sont pas prêts à divulguer quoi que ce soit, qui, si bien, mais ne quelqu'un ici a des suggestions?

Il ressemble à ces deux autres applications agissent comme une application de remplacement de l'écran d'accueil. Lorsque vous activez le mode « childproof » sur les applications que l'utilisateur est invité à choisir et application pour l'action et les choix sont « lanceur, LauncherPro, etc. » ainsi que l'application enfant en bas âge. Vous devez alors faire l'application bambin par défaut et le tour est joué, le téléphone est « verrouillé » et ne peut être « déverrouillé » en utilisant une combinaison de touches ou de toucher les quatre coins de l'écran, etc. lorsque vous « déverrouiller » le téléphone. votre défaut normale app écran d'accueil restauré. Vous ne devez même pas faire l'application bambin valeur par défaut la prochaine fois que vous activez le mode « childproof ».

J'ai lu que ces deux applications ont des problèmes avec les téléphones Samsung et ils peuvent causer un accident et un redémarrage en boucle infinie qui nécessite une réinitialisation d'usine à corriger. Il est évident que ce n'est pas la solution idéale au problème, mais il semble que le seul availiable à ce stade.

Est-ce que quelqu'un a des idées sur la façon de mettre en œuvre un "mode childproof"?

Était-ce utile?

La solution

Je pense que vous avez raison en ce qui concerne le remplacement de l'écran d'accueil. Tout-petit verrouillage Je sais que ne l'emporte pas sur le bouton d'accueil, parce que (au moins sur mon LG GW620) tout en maintenant dans Toddle Verrouillez le bouton d'accueil affiche le menu de type ALT-TAB -. Qui a alors tendance à bloquer le téléphone

Il y a une application de remplacement de l'écran d'accueil disponible, avec le code source, sur le site dev Android:

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

EDIT: aussi, ADW.Launcher:

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

Autres conseils

je devais avoir serrure enfant en bas âge dans une nouvelle application, et ne voulait pas utiliser un lanceur. Voici ce que je l'ai fait, vous pouvez voir l'application https: / /play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. Lorsque le verrouillage est activé, démarrer un service, et l'arrêter lorsque le verrouillage est désactivé
  2. Les contrôles de service haut app en cours d'exécution, et si ce n'est pas mon activité, le service lance mon activité
  3. Il y avait encore un problème que lorsque l'utilisateur clique sur « maison », il faut environ 6 secondes avant que mon activité est lancée à nouveau. Je suppose que cela est une caractéristique de sécurité dans Android, mais pas sûr. Pour contourner cela, lorsque les Détecte de service qu'une autre application est visible, il ajoute une vue de dessus (comme une fenêtre d'alerte) qui couvre l'écran d'accueil pour les quelques secondes, il prend l'application de relancer.

Pour l'étape 3, voici plus de détails:

Créer la mise en page de superposition, par exemple le fichier locked_overlay.xml:

<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>

Dans votre service pour afficher ou masquer l'utilisation de superposition:

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

Vous aurez besoin de l'autorisation

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

Edit: Cela fonctionne dans toute ancienne version d'Android. Mais ne fonctionnera pas dans ICS et Jelly Bean et vous donnera un accident dans l'application

Je remplacé le lanceur d'accueil par défaut en utilisant le code suivant:

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

Pour les versions 4.0 et au-dessus, vous pouvez éviter les restrictions de sécurité Android et définir votre application comme un lanceur. Ajoutez ceci à votre fichier manifeste:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top