Aller au contenu

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.

Lien vers le commentaire
Partager sur d’autres 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
Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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)

Lien vers le commentaire
Partager sur d’autres 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.

Modifié par djeman
  • Like 1
Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres 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
Lien vers le commentaire
Partager sur d’autres 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.

Modifié par djeman
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...