Jump to content

Désactiver le retour sur la Home


ColletJb

Recommended Posts

Bonjour,

Je viens me renseigner auprès de vous car aujourd'hui, un client m'a posé un problème dont je ne sais pas comment m'en tirer.

Le problème est simple: faire une application de démonstration lors d'évènements.

Là où je coince est lorsqu'il me demande que seule cette app soit accessible sur la tablette.

J'imaginait une app qui "interdit" sa propre fermeture sans l'entrée d'un mot de passe, mais je sèche...

Quelqu'un sait-il me conseiller ?

Merci d'avance.

Link to comment
Share on other sites

Tu ne peux pas empêcher la fermeture de ton Activity; c'est Android qui décice. Et une application standard ne peut pas intercepter l'appui sur le bouton Home.

Par contre, tu peux faire de ton application une Home alternative, et auquel cas, tu seras capable d'intercepter le bouton Home; et ce sera ton application qui sera affichée au démarrage de l'appareil.

Tu peux trouver un exemple d'application de type Home dans les samples du SDK (en gros, ça peut se résumer à définir sur ton activity principale un intent-filter pour l'action MAIN et de catégorie HOME)

  • Like 1
Link to comment
Share on other sites

ca fonctionne... Je viens de tester sur une toute bête Activity avec une dialog de password pour la quitter.

Voici le code à ajouter dans le Manifest pour l'Activity:

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.HOME" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

Il faut cependant que je vérifie que le bouton "back" reste bien sur l'Activity...

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour.

Je cherchais à faire exactement la même chose donc je vous remercie d'abord pour cette solution.

J'ai tout de même deux questions :

- Lorsque je met mon appli en home par défaut, ça fonctionne bien, le bouton n'a "aucune" action, et je quitte par un bouton quitter comme je le souhaite. Cependant, lorsque je redémarre ma tablette, c'est mon appli qui se charge au démarrage, mais lorsque j'appui sur mon bouton quitter, l'appli ne se ferme pas (je suppose que le launcher (l'appli home natif) n'est pas lancé ou quelque chose comme cela.

- Y a t'il un moyen de bloquer également l'accès au paramètre ?

Link to comment
Share on other sites

Android gère une pile des écrans/applications, et le bouton back navigue au travers de cette pile et permet de revenir en arrière sur les écrans/applications précédents. Dans ton cas, ton appli étant l'application lançée au démarrage, le bouton back n'a pas d'effet puisqu'il n'y a pas d'application précédente (tout comme, en temps normal, le bouton back n'a pas d'effet sur le launcher, de la même façon)

De quel(s) paramètre(s) parles-tu ? paramètres systèmes ? quel accès souhaites-tu bloquer ?

Link to comment
Share on other sites

Je ne parlais pas du bouton back. J'ai mis un bouton dans mon appli pour pouvoir la quitter quand même (avec un finish() lorsque l'on clique dessus). Mais du coup lorsque la tablette démarre avec mon appli, le finish n'a plus aucune action (enfin, je pense qu'il quitte l'appli quand même, mais la redemarre par la suite)

Est-ce qu'il est possible de lancer le laucher lors du clic au lieu de faire un finish ?

Pour les paramètres, oui, je parle des paramètres systèmes que l'on peut atteindre depuis la barre d'horloge (que j'ai en bas de ma tablette, et en haut de mon téléphone, je ne sais pas trop comment elle s'appelle, désolé) Au final je voudrais vraiment bloquer tous les accès sur la tablette pour que l'utilisateur lambda n'ait accès qu'uniquement à mon application et ne puisse rien faire d'autre

Merci

Link to comment
Share on other sites

Bouton back ou ton bouton quitter, même combat. Par défaut, le bouton back fait un finish sur l'Activity, ce qui revient à ce que tu fais avec ton bouton Quitter. Et donc mes explications restent valables pour ton cas.

Il faudrait effectivement que tu lances explicitement l'application que tu souhaites, via un startActivity; il faut juste que tu connaisses le nom de l'Activity à lancer

Pour ce qui est des paramètres, il n'es pas possible de bloquer leur accès en tant que tel. Mais ce que tu peux faire, c'est d'afficher ton application en plein écran, de ce fait la barre d'état n'étant pas visible, l'accès aux paramètres ne sera plus possible

Link to comment
Share on other sites

Ok merci pour ta réponse.

Pour les paramètres, je l'avais déjà mis en plein écran, mais le problème c'est que sur la tablette, la barre d'état en bas de l'écran, au même niveau que les boutons home, back, etc... du coup même en plein écran, elle reste affichée (ce qui n'est pas le cas sur mon téléphone)

Link to comment
Share on other sites

Faut voir la version du système, ics ?

Edit:

Te mets la solution pour ics de toute façon ça peut quand même t'aider pour ton but.

To this day, you can hide the status bar on handsets using the FLAG_FULLSCREEN flag. In Android 4.0, the APIs that control the system bar’s visibility have been updated to better reflect the behavior of both the system bar and navigation bar:

  • The SYSTEM_UI_FLAG_LOW_PROFILE flag replaces the STATUS_BAR_HIDDEN flag. When set, this flag enables “low profile" mode for the system bar or navigation bar. Navigation buttons dim and other elements in the system bar also hide. Enabling this is useful for creating more immersive games without distraction for the system navigation buttons.
  • The SYSTEM_UI_FLAG_VISIBLE flag replaces the STATUS_BAR_VISIBLE flag to request the system bar or navigation bar be visible.
  • The SYSTEM_UI_FLAG_HIDE_NAVIGATION is a new flag that requests the navigation bar hide completely. Be aware that this works only for the navigation bar used by some handsets (it does not hide the system bar on tablets). The navigation bar returns to view as soon as the system receives user input. As such, this mode is useful primarily for video playback or other cases in which the whole screen is needed but user input is not required.

Et si aucun n'a d'effet sur la tablette ben t'es mal ^^

Edit:

A priori, sur honeycomb quasi sur, c'est pas possible sans redémarrer le service gérant la system bar et pour faire ça il faut être root.

Edited by djeman
  • Like 1
Link to comment
Share on other sites

C'est ICS.

J'ai essayé ce que tu m'as donné mais ça marche pas terrible.

Le SYSTEM_UI_FLAG_LOW_PROFILE permet bien de la cacher, mais on peux la faire réapparaître simplement en allant dessus, du coup, ça n'empêche pas l'utilisateur d'y avoir accès.

Merci quand même

@chpil : comment fais tu pour lancer une activity par son nom ?

Link to comment
Share on other sites

Pour lancer une Activity en connaissant son nom:

Intent intent = new Intent();
intent.setClassname( "nom.du.package.de.l.activity", "nom.de.la.classe.de.l.activity");
startActivity();

Le plus difficile est de connaitre le nom de l'activity. Sans compter que tu te lies du coup explicitement à un launcher donné, ce qui ne rend pas très portable l'application

Une autre solution est de retrouver la liste des Activities de type Launcher. Exexmple d'une méthode qui te retourne l'Intent à lancer pour activer le premier Launcher trouvé:

private Intent getHome() {
 Intent result = null;
 Intent launcherIntent = new Intent(Intent.ACTION_MAIN, null);
 launcherIntent.addCategory(Intent.CATEGORY_HOME);
 List<ResolveInfo> listeHomes = getPackageManager().queryIntentActivities(launcherIntent, 0);
 if (listeHomes.size() > 0) {
   ResolveInfo info = listeHomes.get(0);
   result = new Intent();
   result.setClassname( info.activityInfo.packageName, info.activityInfo.home);
 }
 return result;
}

Dans ton cas, ton application étant elle-même une Home, il faudrait l'enlever de la liste (ne pas prendre la première de la liste comme dans mon exemple). Mais l'idée est là, et ça devrait fonctionner et correspondre à ce que tu cherches

  • Like 1
Link to comment
Share on other sites

Le SYSTEM_UI_FLAG_LOW_PROFILE permet bien de la cacher, mais on peux la faire réapparaître simplement en allant dessus, du coup, ça n'empêche pas l'utilisateur d'y avoir accès.

En allant dessus ? Comment ça ? Car si c'est en touchant l'écran à cette endroit tu peux override le touch listener et bloquer les signaux que le système n'a pas besoin de connaitre, bon c'est qu'une idée car je connais pas cette barre persistante.

Edited by djeman
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...