72 votes

Reprendre l'application et empiler de la notification

Je veux reprendre mon application à partir d'un état de notification de la barre exactement de la même manière que lorsque l'utilisateur tape sur son icône dans le lanceur.

C'est: je veux de la pile pour être dans le même état qu'il était avant que l'utilisateur l'a laissé.

Le problème lors de la configuration d'une attente de l'intention de la notification, c'est qu'il cible toujours une activité spécifique. Je ne veux pas de cela. J'ai besoin de reprendre l'application est juste que le lanceur ne.

Donc, si l'utilisateur est en activité, je veux reprendre l'activité A. S'il a lancé l'activité de B à partir de l'activité d'Un, alors je veux B à afficher lorsque l'utilisateur appuie sur la notification et la pile à rétablir Un obtient reprise lorsque l'utilisateur appuie sur le bouton retour dans B.

Il y a quelques autres questions de questions de titres similaires, mais aucune adresse de mon problème.

171voto

GrAnd Points 5387

Utilisez simplement les mêmes filtres d'intention que ceux utilisés par Android lors du lancement de l'application:

 final Intent notificationIntent = new Intent(context, YourActivity.class);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 

L'intention créée pour ouvrir votre activité à partir de la barre de notification étant identique à celle utilisée par Android pour le lancement de votre application, l'activité précédemment ouverte sera affichée au lieu de créer une nouvelle.

3voto

Hector William Points 331

Créer une activité, puis définir les catégories et les drapeaux respectifs ... C’est ainsi que cela fonctionnait pour moi. Je devais le faire de cette façon, car je l’avais fait pour soutenir Api lvl 8.

 intent.addCategory(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClass(this, YourActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT|
                Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 
                   PendingIntent.FLAG_UPDATE_CURRENT);
 

et dans le Manifeste Android

 android:launchMode="singleTask"
 

Donc, ce qui a rendu l’astuce, c’est le Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT avec la ligne définie dans le manifeste.

J'espère que cela aide d'autres personnes.

1voto

PinoSan Points 658

Puisque je ne peux pas ajouter un commentaire à @GrAnd réponds-je ajouter à cette réponse. Cette intention que vous décrivez dans votre est-il utilisé pour la notification, à droite? Mais si votre pile de demande a été rempli avec des activités A et B en plus de cela, de ce que doit être ce YourActivity que vous spécifiez dans cette intention? Il ne sera pas ajouté à la pile d'application, de sorte que la nouvelle pile A,B et YourActivity sur le dessus de ceux-là? Cette nouvelle intention est seulement de notification?

P. S. je n'ai pas l'ajout d'une nouvelle Question, parce que je pense que même @olivierg est intéressé à cette question. Merci

0voto

Zulfiqar Ali Points 368

This is Very Simple ouvre votre fichier manifeste et définissez l’attribut Mode de lancement singleTop dans votre attribut d’activité

-4voto

auwall Points 196

Il pourrait exister un moyen plus simple, mais vous pouvez stocker les données dans la base de données SQLite et, chaque fois que vous redémarrez l'application, quels que soient les états enregistrés dans la base de données, vous pouvez les récupérer et définir leurs valeurs.

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