web-dev-qa-db-fra.com

Android - Est-il possible de désactiver le clic du bouton d'accueil

J'ai une application, quand elle se lance, je dois désactiver tous les boutons sur Android appareil, j'ai réussi à désactiver l'appel de fin et d'autres. J'ai besoin de désactiver le clic du bouton d'accueil. Il ne devrait pas produire de action sur clic.

Toutes suggestions très appréciées

61
Vinayak Bevinakatti

Je suis sûr que Toddler Lock utilise simplement un BroadcastReciever et écoute Intent.ACTION_MAIN et la catégorie Intent.CATEGORY_HOME - c'est pourquoi lorsque vous le lancez pour la première fois, il vous demande de cocher la case "utiliser cette application par défaut" et vous fait sélectionner le verrouillage du tout-petit.

Donc, ce n'est pas vraiment du tout bloquer le bouton Home, c'est juste se configurer comme récepteur de diffusion par défaut pour:

Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);

Lorsque vous lancez Toddler Lock, il définit probablement un indicateur interne, et si vous appuyez sur le bouton d'accueil, cela amène simplement la fenêtre à l'avant. Si le drapeau n'est pas défini, il lance probablement le lanceur explicitement.

J'espère que cela à du sens. Ce n'est qu'une théorie, mais je suis presque sûr à 100% que c'est comme ça que ça se passe.

29
synic

Ajoutez le code suivant à votre activité:

@override

public void onAttachedToWindow()
{  
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
       super.onAttachedToWindow();  
}

Modifier:

Cela fonctionne dans toutes les anciennes versions d'Android. Mais ne fonctionnera pas dans ICS et Jelly bean et vous fera planter dans l'application

Que signifie cette ligne 4 Java code signifie dans Android?

18
Jeffrey

Ajoutez ceci dans votre manifest.xml pour votre activité principale:

<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.LAUNCHER" />
<category Android:name="Android.intent.category.HOME" />

Le bouton ACCUEIL lancera (re) lancera toujours votre activité. Fonctionne à Froyo.

11
Jean-François

J'ai trouvé un moyen d'aborder la touche HOME. Pour votre application, définissez le manifeste comme

<action Android:name="Android.intent.action.MAIN" /> 
<category Android:name="Android.intent.category.HOME" /> 
<category Android:name="Android.intent.category.DEFAULT" />                            
<category Android:name="Android.intent.category.MONKEY"/>

Maintenant, votre application est une autre application Launcher.

Utilisez l'adb et désactivez l'application de lancement à l'aide du gestionnaire de packages

pm disable com.Android.launcher2

Maintenant, la pression sur la touche Accueil restera dans le même écran.

5
amiekuser

ici vous pouvez trouver mon Android qui persiste sur la page d'accueil. Accueil, Retour, Appel, Bouton d'alimentation sont désactivés. L'utilisateur ne peut terminer l'application qu'en tapant Un mot de passe.

5
davide.gironi

Un autre ajout au post Jeffreys, voici quelque chose qui a fonctionné pour moi (et qui permet toujours un thème translucide)

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

Étant donné que cela fait monter le clavier, vous pouvez également désactiver le clavier pendant que l'application est en cours d'utilisation:

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

Cela fonctionne très bien pour créer votre propre application de verrouillage du clavier.

2
Richard Rout