Benachrichtigung öffnet Aktivität, Zurück-Taste gedrückt, Hauptaktivität ist geöffnet?

7

Der beste Weg, um mein Problem zu beschreiben, ist wie folgt:

  1. Beim Booten wird eine Benachrichtigung erstellt (mit BroadcastReceiver ).
  2. Die Hauptaktivität meiner App wird geöffnet und die Home-Taste wird gedrückt (die App läuft immer noch im Hintergrund, bis das System sie schließt).
  3. Ich ziehe die Statusleiste herunter und drücke auf die Benachrichtigung, die zuvor beim Booten erstellt wurde.
  4. Es wird eine andere Aktivität als die Hauptaktivität gestartet.
  5. Ich drücke die Zurück-Taste und die Hauptaktivität wird angezeigt.

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?

    
Ricardo Amaral 30.09.2011, 18:19
quelle

5 Antworten

3

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

    
Dharmendra 30.09.2011, 19:23
quelle
19

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

%Vor%


2. Erstellen Sie einen Backstack basierend auf Intent , der Activity startet:

%Vor%     
im_crash 31.01.2013 16:21
quelle
3

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".

    
Shoom Kloom 10.09.2012 14:03
quelle
1

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%     
junto 22.06.2017 08:01
quelle
0

Es funktioniert für mich. versuche das:

%Vor%     
Khushbu Sharma 11.03.2016 06:39
quelle