Utiliser une notification persistante pour permettre à l'utilisateur de revenir à l'application Android en cours d'exécution


Answers

D'accord, je crois que j'ai trouvé une solution satisfaisante pour mon cas spécifique . J'ai ajouté un entier statique à mon "mainActivity", et chaque fois que "onCreate" est déclenché, il incrémente l'entier. Chaque fois que "onDestroy" est renvoyé, il décrémente.

Dans mon "returnFromNotify", je regarde l'entier statique pour voir s'il est supérieur à 0. Si c'est le cas, je suppose qu'il y a un "mainActivity" actif, et que "finish" dans "returnFromNotify" retournera là. Sinon, il suppose que les utilisateurs ont "sauvegardé", se termine, puis utilise "startActivity" pour lancer une nouvelle instance de "mainActivity".

Ce n'est pas une solution universelle, mais pour mes objectifs, je pense que cela suffira. Je suis toujours ouvert à d'autres réponses, et si quelqu'un peut percer un trou dans ma logique, s'il vous plaît faites-le - une critique constructive est la bienvenue. Merci.

Question

Je développe une application avec de nombreuses activités. Je voudrais créer une notification persistante qui (plus ou moins) dit, "AppName - Return to AppName" qui sera présent lorsque mes services d'arrière-plan sont en cours d'exécution. Créer et éliminer la notification n'a pas posé de problème.

Maintenant, l'utilisateur peut être sur l'un de plusieurs écrans / activités, quitter l'application, puis vouloir entrer à nouveau l'application via la notification. Le problème est que la notification doit avoir une intention, qui lance une activité prédéterminée . Je souhaite que la notification réapparaisse dans l'application quelle que soit l'activité située en haut de la pile d'historique .

Ma première tentative d'une solution de contournement laide était de faire une activité (appelons-la "returnFromNotify") dont le seul travail était de "se terminer" dans son "onCreate". La notification ouvrirait "returnFromNotify" dans la portée de l'historique des applications, qui se retirerait alors immédiatement, renvoyant l'utilisateur à l'état d'historique précédent dans la pile d'applications. Cela semble fonctionner ... sauf si l'utilisateur a utilisé "retour" pour complètement revenir en arrière de l'application. Ensuite, quand ils frappent la notification, "returnFromNotify" se charge, puis se termine, en les renvoyant à l'écran d'accueil (car il n'y a aucune activité dans la pile d'historique pour l'application).

J'ai envisagé d'essayer de détecter s'il y avait quelque chose dans la pile d'historique avant "returnFromNotify", et sinon, lancez mon activité principale. Je n'arrive pas à trouver un moyen de le faire non plus.

Toute contribution ou suggestion pour un novice Java / Android? Pour votre information, mon histoire primaire est avec les langages basés sur le script.




Ma première approche serait d'utiliser SharedPreferences et de stocker une paire de valeurs clés appelée quelque chose comme lastDisplayedActivity . Ensuite, dans onResume chaque activité (et éventuellement `onCreate ') vous auriez une ligne comme ceci:

sharedPreferences.edit().putInteger("lastDisplayedActivity", ReturnFromNotify.THIS_ACTIVITY_NAME);

En d'autres termes, vous stockez une variable à l'échelle de l'application indiquant quelle activité a été affichée en dernier. Ensuite, vous venez de saisir cette variable de SharedPreferences et lancer l'activité correspondante.