Der beste Weg, um mein Problem zu beschreiben, ist wie folgt:
BroadcastReceiver
). Wie kann ich diesen letzten Schritt verhindern? Mit dem Zurück-Knopf möchte ich zurückgehen, wo ich war, das ist der Startbildschirm (der Desktop mit allen Widgets und App-Icons). Die Hauptaktivität meiner App sollte im Hintergrund ausgeführt werden, warum wurde sie mit der Zurück-Taste aufgerufen?
Falls es relevant ist, lautet mein Code zum Erstellen einer Benachrichtigung wie folgt:
%Vor% Ich habe versucht, ein paar mehr Flag-Kombinationen zu intent
hinzuzufügen, aber keiner von beiden hat mein Problem gelöst ... Vorschläge?
Dein Problem besteht in den folgenden Schritten, wie ich aus deiner Frage weiß:
1. Benachrichtigung erstellen nach dem Start abgeschlossen
2. Hauptaktivität wird beim Start aufgerufen
3.Sie haben die Home-Taste gedrückt, damit die Hauptaktivität gestoppt wird, aber nicht zerstört wird
4.Sie klicken auf Benachrichtigung aus der Statusleiste, damit Ihre application will be resume
, so dass Sie bereits Hauptaktivität in Ihrem Backstack und Benachrichtigung haben, neue Aktivität erstellen, wie Sie in Ihrer Frage erwähnt NewNoteActivity Aktivität wird Push Back Stack.SO in diesem Schritt you have two activities in back stack
5.Sie haben die Taste gedrückt, so dass last activity will be destroy
und Ihre main activity will be resume
Aber Sie wollen zum Homepage-Bildschirm gehen.
Also Ihr Problem besteht in den folgenden Schritten, wie ich aus Ihrer Frage weiß ist
1. Benachrichtigung erstellen nach dem Start abgeschlossen
2. Hauptaktivität wird beim Start aufgerufen
3.Sie haben die Home-Taste gedrückt, damit die Hauptaktivität gestoppt wird, aber nicht zerstört wird
4.Sie klicken auf Benachrichtigung aus der Statusleiste, damit Ihre application will be resume
, so dass Sie bereits Hauptaktivität in Ihrem Backstack und Benachrichtigung haben, neue Aktivität erstellen, wie Sie in Ihrer Frage erwähnt NewNoteActivity Aktivität wird Push Back Stack.SO in diesem Schritt you have two activities in back stack
5.Sie haben die Taste gedrückt, so dass last activity will be destroy
und Ihre main activity will be resume
Sie möchten jedoch die Homepage-Aktivität öffnen, wenn Sie auf die Schaltfläche Zurück von der Aktivität NewNoteActivity gedrückt haben.
Also die Lösung ist, dass, wenn Sie den Knopf von Ihrer NewNoteActivityactivity zurück gedrückt haben, starten Sie die Hauptaktivität erneut mit Intent.FLAG_ACTIVITY_CLEAR_TOP
flag, so dass Ihre Hauptaktivität neu erstellt wird und onNewIntent()
method erhält, so dass Sie die Flagge erhalten und beenden können Haupttätigkeit
zum Beispiel
%Vor% Jetzt müssen Sie onNewIntent()
method in Ihrer Hauptaktivität implementieren
Wenn die Back-Taste von der NewNoteActivity-Aktivität gedrückt wird, ruft Ihre Main-Aktivität onNewIntent()
method auf. In dieser Methode müssen Sie die Flag-Variable holen, die von der NewNoteActivity-Aktivität übergeben wurde Aktivität, so dass Sie den Startbildschirm erhalten.
BEARBEITEN
Sie sagen, dass Sie eine der Aktivitäten von A, B oder C geöffnet haben und den Zurück-Knopf gedrückt haben, so dass diese Aktivität geschlossen wird. Wenn Sie zu diesem Zeitpunkt nur eine Aktivität im Stapel haben, wird Ihre Anwendung sein "Geschlossen" bedeutet, dass Sie zum Startbildschirm gelangen. Wenn Sie jedoch mehr als eine Aktivität haben und die Schaltfläche "Zurück" gedrückt haben, haben Sie mindestens eine Aktivität im Stapel und klicken jetzt auf Benachrichtigung, damit eine neue Aktivität mit Ihrer Benachrichtigung geöffnet wird Die Aktivität wird auf dem Backstack aktiviert. Wenn Sie die Backtaste gedrückt haben, wird Ihre letzte Aktivität, die Ihrer Benachrichtigung zugeordnet ist, geschlossen, wenn Sie die Methode onBackPressed () in dieser Aktivität nicht ändern im Backstack, damit die Aktivität wieder aufgenommen wird oder wenn im Backstack keine Aktivität stattfindet, wird Ihre Anwendung geschlossen und Sie erhalten den Startbildschirm
Für wessen wer noch könnte antworten müssen. Es sieht so aus, als ob Sie das erreichen wollen:
Wenn Sie
Activity
von einer Benachrichtigung aus starten, müssen Sie die erwartete Navigationserfahrung des Benutzers beibehalten. Klicken Sie auf Zurück , um den Benutzer durch den normalen Arbeitsablauf der Anwendung zum Startbildschirm zu führen. Wenn Sie auf Neueste klicken, sollte die Aktivität als separate Aufgabe angezeigt werden.
Ihre Situation ist - Einrichten einer regulären Aktivität PendingIntent
Siehe vollständige Schritte im Link. Grundsätzlich müssen Sie:
1. Definieren Sie die Hierarchie Activity
in AndroidManifest.xml
2. Erstellen Sie einen Backstack basierend auf Intent
, der Activity
startet:
Hatte das gleiche Problem. Was für mich funktionierte, war, dem Manifest das folgende Attribut für die von der Benachrichtigung gestartete Aktivität zuzuweisen:
android:taskAffinity=""
Dies trennt im Wesentlichen die Affinität der Benachrichtigungsaktivität von der Hauptaktivität und so fühlt sich das Betriebssystem nicht gezwungen, zu der Hauptaktivität zurückzukehren, sondern kehrt einfach zu dem zurück, was vorher z. der "Desktop".
Ich verwende diese Lösung in meinen Apps. Überschreiben Sie onBackPressed (in Ihrer Aktivität, die von der Benachrichtigung weitergeleitet wird) und prüfen Sie, ob Ihre App im Stapel ist oder nicht. Wenn nicht, dann starte deine Root-Aktivität. Der Benutzer kann immer von der Root-Aktivität aus navigieren. Das mache ich in meinen Apps
%Vor%Tags und Links android android-intent notifications back-button android-pendingintent