Je veux savoir si l'utilisateur revient à l'écran d'accueil s'il quitte l'activité en cours.
Pouvez-vous s'il vous plaît fournir la seule ligne de code afin que la façon d'utiliser isTaskRoot soit claire. Merci.
Je veux savoir si l'utilisateur revient à l'écran d'accueil s'il quitte l'activité en cours.
Je vais poster le commentaire de @H9kDroid comme la meilleure réponse ici pour les personnes qui ont une question similaire.
Vous pouvez utiliser isTaskRoot() pour savoir si l'activité est le Racine d'une tâche.
J'espère que cela vous aidera
Pouvez-vous s'il vous plaît fournir la seule ligne de code afin que la façon d'utiliser isTaskRoot soit claire. Merci.
Le seul problème est que dans la version <=4.4, le comportement est différent de celui de la version >= 5.x. Il semble toujours renvoyer false.
MISE À JOUR (juillet 2015) :
Depuis getRunningTasks() sont dépréciées, à partir de l'API 21, il est préférable de suivre les règles suivantes raukodraug responder o Ed Burnette un (Je préférerais le deuxième).
Il est possible de vérifier les tâches en cours et leur pile à l'aide de la fonction ActivityManager .
Donc, pour déterminer si une activité est la dernière :
Utilisez le code suivant :
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 &&
taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
Log.i(TAG, "This is last activity in the stack");
}
Veuillez noter que le code ci-dessus ne sera valable que si vous avez une seule tâche. S'il est possible qu'il y ait un certain nombre de tâches pour votre application, vous devrez vérifier d'autres codes d'accès. liste des tâches éléments. En savoir plus sur les tâches Tâches et pile arrière
H9kDroid a fait une suggestion correcte. La réponse choisie est un hack. Il faut le faire de la bonne façon en utilisant le isTaskRoot()
méthode.
@Sufian où est-ce qu'il pirate particulièrement ? Le code est logique et utilise les API Android ouvertes de la manière dont elles sont censées être utilisées (par exemple, getRunningTasks devrait être utilisé pour obtenir les tâches en cours d'exécution et on pourrait vouloir l'appeler uniquement dans le but d'analyser ces tâches). L'utilisation de get(0) est bien documentée et logique : "Retourne une liste des tâches en cours d'exécution, la plus récente en premier et les plus anciennes après dans l'ordre".
Bien qu'il existe peut-être un moyen d'y parvenir (voir les autres réponses), je pense que vous ne devriez pas le faire. Les applications Android normales ne devraient pas avoir besoin de savoir si l'écran d'accueil est sur le point de s'afficher ou non.
Si vous essayez de sauvegarder des données, placez le code de sauvegarde des données dans votre méthode onPause(). Si vous essayez de donner à l'utilisateur un moyen de changer d'avis sur l'existence de l'application, vous pourriez intercepter la touche haut/bas de la touche Retour et la méthode onBackPressed() et lui présenter une invite "Êtes-vous sûr ?
Et si j'ai besoin qu'un service fonctionne tant que l'utilisateur n'a pas quitté l'activité ? Je ne peux pas piéger les fonctions comme onStop car elles pourraient être appelées après l'extinction de l'écran.
Une façon d'en garder la trace est d'inclure un marqueur lorsque vous démarrez une nouvelle activité et de vérifier si le marqueur existe.
Chaque fois que vous commencez une nouvelle activité, insérez le marqueur :
newIntent=new Intent(this, NextOne.class);
newIntent.putExtra(this.getPackageName()+"myself", 0);
startActivity(newIntent);
Et vous pouvez alors le vérifier comme ceci :
boolean islast=!getIntent().hasExtra(this.getPackageName()+"myself")
Le problème avec la solution de sandrstar utilisant ActivityManager
c'est que vous avez besoin d'une autorisation pour obtenir les tâches de cette façon. J'ai trouvé une meilleure solution :
getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
El Activity
en bas de la pile devrait toujours obtenir cette catégorie par défaut, tandis que les autres activités ne devraient pas l'obtenir.
Mais même si cela échoue sur certains appareils, vous pouvez le régler en démarrant votre Activity
:
Intent intent = new Intent(startingActivity, SomeActivityClass.class);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
activity.startActivity(intent);
Que se passe-t-il si l'activité est ouverte à partir d'une notification push ? Ils n'ont pas la CATEGORIE LAUNCHER
Je suis certain que la deuxième partie de ma réponse est toujours valable. Vous pouvez définir la catégorie comme une indication dans l'intention. Dans ce cas, peut-être dans l'intention de votre contexte de notification. Sinon, vous pouvez aussi utiliser des drapeaux pour cela. Consultez ce lien pour la création d'une notification avec intention : stackoverflow.com/questions/13716723/
Néanmoins, si votre activité la plus ancienne est MainActivity et qu'elle est maintenant reprise, que vous recevez une notification push et que vous définissez le pendingIntent pour ouvrir avec CATEGORY_LAUNCHER, alors vous aurez 2 activités avec cette catégorie. Probablement sur des tâches différentes cependant
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.
1 votes
Ceci pourrait vous aider : stackoverflow.com/questions/2590581/activités-stack
45 votes
Je viens de découvrir qu'il existe une fonction dans Activity appelée isTaskRoot qui, je suppose, peut vous aider.