Ich versuche, das beschriebene Verhalten here zu implementieren, wo eine Benachrichtigung (oder was auch immer) eine "interne" Aktivität in Ihrer App startet, und dann, wenn der Benutzer zurückgedrückt es geht meine "Heim" -Aktivität.Zurück zur Hauptaktivität von Benachrichtigung erstellt Aktivität
Die Android docs sagt
Im Fall der Zurück-Taste, sollen Sie die Navigation mehr vorhersehbar durch Einfügen in die Aufgabe der zurück stapeln den kompletten nach oben Navigation Pfad zum obersten Bildschirm des App machen. So können die Nutzer, die vergessen haben, wie sie Ihre App eingegeben haben, aufrufen, um zum obersten Bildschirm der App zu gelangen, bevor sie den Bildschirm verlassen ( ).
Gibt es eine gute Möglichkeit, das zu tun? Andere Fragen zu Stackoverflow schlagen vor, die Hauptaktivität mit einer Absicht zu starten, die sie anweist, die interne Aktivität zu starten, aber das scheint ein riesiger Hack zu sein, den Google ein wenig in Google Mail verwendet hätte, und ich nehme an, dass es eine anständige Methode gibt dass sie das Verhalten befürworten.
Gibt es einen nicht-hacky Weg, dies zu tun?
Leider scheint dies für mich nicht zu funktionieren. Meine MainActivity wird tatsächlich wieder auf den Navigationsstapel geschoben und funktioniert nur einmal für eine Benachrichtigung (ich lehne sie nicht automatisch ab). Irgendwelche Ideen? – bompf
@bompf, das liegt wahrscheinlich daran, dass 'PendingIntent.FLAG_ONE_SHOT' in' PendingIntent.getActivities' verwendet wird. Ich schlage stattdessen 'PendingIntent.FLAG_CANCEL_CURRENT' vor. – Sam
Danke; Das funktionierte für mich, während 'TaskStackBuilder' nicht zu funktionieren schien. Allerdings hat Ihr Code eine seltsame Situation ausgelöst: Wenn ich 'MainActivity' über den Launcher geöffnet habe und dann die Aktion aus der Benachrichtigung geöffnet habe, nachdem ich die Zurück-Taste gedrückt habe, um zurück zu' MainActivity' zu gelangen, drückte die Zurück-Taste 'MainActivity' wieder. So: '[MainActivity] [MainActivity] [ConversationActivity]'. Ich habe es behoben, indem ich die zweite Codezeile in 'backIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK)' geändert habe. – Sam