82 votes

Comment désactiver le bouton d'accueil et les autres boutons système dans Android ?

Je dois désactiver le bouton d'accueil et les autres boutons du système dans mon application Android.

Exemple : MX Player ( voir sur Google Play ) - vous pouvez appuyer sur l'icône "verrou" sur l'écran du lecteur et cela verrouille tous les boutons du système matériel et logiciel.

Il fonctionne bien SANS ROOTING.

Je l'ai testé sur quelques appareils avec différentes versions d'Android. J'ai essayé de désassembler Kids Lock (plugin) mais je n'ai encore aucune idée de son fonctionnement.

J'ai besoin de la même solution que le Kids Lock (plugin) pour MX Player : - désactive les boutons Home, Back et tous les autres boutons du système.

Des suggestions ?

1 votes

stackoverflow.com/questions/17183905/ . vous ne pouvez pas désactiver le bouton d'accueil.

2 votes

@user1024 avez-vous trouvé une solution à votre question ? Comme je veux aussi faire la même fonctionnalité que dans MX Player.

2 votes

La méthode de MX Player est plutôt intéressante. Ils empêchent en fait la barre de navigation de revenir.

94voto

Assaf Gamliel Points 4792

Tout d'abord, réfléchissez longuement si vous voulez vraiment désactiver l'option Home ou tout autre bouton d'ailleurs (par exemple, le bouton Back ), ce n'est pas quelque chose qui devrait être fait (au moins la plupart du temps, c'est une mauvaise conception). Je ne peux parler que pour moi, mais si j'ai téléchargé une application qui ne me permet pas de faire quelque chose comme cliquer sur un bouton de l'OS, la prochaine chose que je fais est de désinstaller cette application et de laisser une très mauvaise critique. Je pense également que votre application ne sera pas mise en avant sur l'App Store.

Maintenant...

Remarquez que MX Player demande la permission de dessiner par-dessus d'autres applications : MX Player permissions
Puisque vous ne pouvez pas remplacer le Home bouton sur Android (du moins pas dans les dernières versions du système d'exploitation). MX Player se dessine au-dessus de votre lanceur lorsque vous "verrouillez" l'application et que vous cliquez sur l'icône Home bouton.
Pour voir un exemple qui est un peu plus simple et direct à comprendre, vous pouvez voir l' Application Facebook Messenger .

On m'a demandé de fournir des informations supplémentaires sur MX Player. Status Bar y Navigation Bar "overriding", je modifie ma réponse pour inclure ces sujets également.

Tout d'abord, MX Player utilise Mode plein écran immersif ( Vidéo DevBytes ) sur KitKat .
Android 4.4 (API Level 19) introduit une nouvelle SYSTEM_UI_FLAG_IMMERSIVE pour setSystemUiVisibility() qui permet à votre application de passer véritablement en "plein écran". Ce drapeau, lorsqu'il est combiné avec le SYSTEM_UI_FLAG_HIDE_NAVIGATION y SYSTEM_UI_FLAG_FULLSCREEN masque les barres de navigation et d'état et permet à votre application de capturer tous les événements tactiles sur l'écran.

Lorsque le mode plein écran immersif est activé, votre activité continue de recevoir tous les événements tactiles. L'utilisateur peut révéler les barres du système par un glissement vers l'intérieur le long de la région où les barres du système apparaissent normalement. Cela permet d'effacer les SYSTEM_UI_FLAG_HIDE_NAVIGATION (et l'option SYSTEM_UI_FLAG_FULLSCREEN si elle est appliquée) pour que les barres du système deviennent visibles. Cela déclenche également votre View.OnSystemUiVisibilityChangeListener (écouteur) si elle est définie. Toutefois, si vous souhaitez que les barres du système se cachent à nouveau automatiquement au bout de quelques instants, vous pouvez utiliser la commande SYSTEM_UI_FLAG_IMMERSIVE_STICKY drapeau. Notez que la version "collante" de l'indicateur ne déclenche aucune écoute, car les barres du système affichées temporairement dans ce mode sont dans un état transitoire.

Deuxièmement : Masquer la barre d'état
Troisièmement : Masquer la barre de navigation
Veuillez noter que, bien que l'utilisation du plein écran immersif ne soit que pour KitKat en cachant le Status Bar y Navigation Bar n'est pas seulement pour KitKat .

Je n'ai pas grand chose à dire sur le 2ème et le 3ème, Vous avez compris l'idée je crois, c'est une lecture rapide en tout cas. Assurez-vous juste de prêter une attention particulière à View.OnSystemUiVisibilityChangeListener (écouteur) .

J'ai ajouté un Gist qui explique ce que je voulais dire, il n'est pas complet et a besoin de quelques corrections mais vous aurez l'idée. https://gist.github.com/Epsiloni/8303531

Bonne chance dans la mise en œuvre de ce projet, et amusez-vous bien !

1 votes

Alors comment fait-on pour cacher la barre de navigation et empêche qu'il ne réapparaisse pas lorsque l'écran est touché ? Et lorsque vous faites un mouvement de balayage pour sortir du mode immersif, la barre de navigation s'affiche et se cache à nouveau immédiatement. En outre, il n'est pas possible de faire apparaître le panneau de notification lorsqu'il est verrouillé, même lorsque le "glissement immersif" force la barre d'état à s'afficher. Comment cela se fait-il ?

0 votes

Oui, je n'ai pas ajouté ça à ma réponse. Je vais la modifier maintenant.

0 votes

Ajouté, faites-moi savoir si vous avez besoin de quelque chose d'autre.

14voto

Lê Quang Duy Points 56

J'ai suivi le La réponse de shaobin0604 et j'ai finalement réussi à verrouiller le bouton HOME, en ajoutant :

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

à AndroidManifest.xml Tout ce que vous avez à faire est de copier HomeKeyLocker.java de librairie de shaobin à votre projet et l'implémenter comme dans l'exemple de shaobin . BTW : la version Android de mon AVD est la suivante Android 4.0.3 .

0 votes

Est-ce que ça fonctionne sous Android 4.4.4 ? Parce que, je l'ai essayé sur mon Moto G qui fonctionne en 4.4.4. Cela n'a pas fonctionné pour moi.

1 votes

Cette bibliothèque ne fait que désactiver le bouton d'accueil dur. Le Moto G a un bouton d'accueil souple, donc cela ne fonctionne pas. @ venkat

0 votes

Une alerte est une bonne solution, si ce n'est la meilleure, mais gardez à l'esprit que sur certains appareils (Nexus 4 par exemple) cela ne fonctionnera pas et que le bouton d'accueil est toujours utilisable !

14voto

shaobin0604 Points 525

Vous pouvez utiliser Android-HomeKey-Locker pour désactiver la touche HOME et les autres touches du système (telles que la touche BACK et la touche MENU).

J'espère que cela vous aidera dans votre demande. Merci.

1 votes

Cela vient de désactiver le bouton d'accueil dur... !!

0 votes

Ça a parfaitement fonctionné pour moi. Je veux probablement désactiver tous les boutons physiques, en fait... J'utilise ceci pour Google Cardboard afin de désactiver le bouton Home, puisque mon boîtier le touche.

0 votes

Comment désactiver le bouton des applications récentes

6voto

Márton Molnár Points 5258

Juste une supposition, mais je pense qu'avec le FENÊTRE D'ALERTE DU SYSTÈME (affichée en tant que "Dessin sur d'autres applications", cf. aquí ), il serait possible d'afficher votre application en plein écran, type d'alerte système fenêtre. De cette façon, elle cachera toutes les autres applications, même l'écran d'accueil. vraiment être désactivé, mais sans effet visible.

MX Player a cette permission déclarée, et Facebook Messenger l'a aussi pour l'affichage de " têtes de chat " sur n'importe quoi - donc ça pourrait être la solution.

Mise à jour (ajoutée à partir de mes commentaires) : Ensuite, utilisez SYSTEM_UI_FLAG_HIDE_NAVIGATION en conjonction avec la capture des événements de toucher/utilisation de OnSystemUiVisibilityChangeListener pour remplacer le comportement par défaut (barre de navigation apparaissant au toucher). Par ailleurs, puisque vous avez dit que la sortie du geste immersif ne fonctionne pas, vous pourriez essayer de définir également le paramètre SYSTEM_UI_FLAG_IMMERSIVE_STICKY (avec SYSTEM_UI_FLAG_FULLSCREEN et SYSTEM_UI_FLAG_HIDE_NAVIGATION).

0 votes

Un test rapide -- ajouter la permission et appeler getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_‌​ALERT); -- montre que cela masque la barre d'état (et le mouvement de balayage vers le bas utilisé pour quitter le plein écran immersif ne fonctionne pas), mais pas la barre de navigation. Les boutons de cette barre sont toujours fonctionnels.

0 votes

Je n'ai pas encore le SDK, mais ma prochaine idée serait d'utiliser SYSTEM_UI_FLAG_HIDE_NAVIGATION en conjonction avec la capture d'événements tactiles/utilisation de OnSystemUiVisibilityChangeListener pour remplacer le comportement par défaut (barre de navigation apparaissant au toucher).

0 votes

De plus, puisque vous avez dit que le geste immersif de sortie ne fonctionne pas, vous pourriez essayer de définir également SYSTEM_UI_FLAG_IMMERSIVE_STICKY (avec SYSTEM_UI_FLAG_FULLSCREEN et SYSTEM_UI_FLAG_HIDE_NAVIGATION).

4voto

Alvaro Cavalcanti Points 134

Il était possible de désactiver le bouton d'accueil, mais ce n'est plus le cas. C'est dû à des logiciels malveillants qui piégeraient l'utilisateur.

Vous pouvez voir plus de détails ici : Désactiver le bouton d'accueil dans Android 4.0+.

Enfin, le bouton Précédent peut être désactivé, comme vous pouvez le voir dans cette autre question : Désactiver le bouton retour dans Android

2 votes

Je viens de tester le lecteur MX comme il l'a dit sur un Nexus 4, et il a vraiment verrouillé le bouton d'accueil =S

0 votes

Le bouton retour est censé fonctionner de la manière pour laquelle il a été conçu. Je vous conseille de ne pas désactiver le bouton retour.

0 votes

Je comprends votre point de vue, @Raghunandan, et je l'approuve. Pourtant, le bouton Retour peut être désactivé, et je fais confiance au développeur pour en tenir compte. S'il parvient à briser l'utilisabilité de son application, ses utilisateurs le lui feront savoir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X