Ich habe eine Anwendung mit Benachrichtigungen, die eine bestimmte Aktivität öffnen, wenn ich darauf klicke. Ich möchte, dass, wenn ich auf die Benachrichtigung klicke und die Aktivität bereits geöffnet ist, sie nicht erneut gestartet, sondern nur nach vorne gebracht wird.
Ich dachte, ich könnte es mit der Flagge machen FLAG_ACTIVITY_BROUGHT_TO_FRONT
oder FLAG_ACTIVITY_REORDER_TO_FRONT
, aber es öffnet sie immer wieder, so dass ich die Aktivität zweimal habe.
Das ist mein Code:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Kann ich es mit Flags verwalten oder sollte ich eine Variable in SharedPreferences speichern, um zu überprüfen, ob sie geöffnet ist oder nicht?
Vielen Dank!
android
notifications
android-activity
PX-Entwickler
quelle
quelle
Antworten:
Sie müssen das
launchMode
Attribut festlegen , mit demActivity
Sie beginnensingleTop
. Dies führt dazu, dass eingehende Absichten an die vorhandene Instanz übermittelt werden, anstatt eine neue Instanz zu starten, wenn sich dieseActivity
bereits oben im Stapel der Aufgabe befindet.Dies erfolgt im Manifest durch Hinzufügen
android:launchMode="singleTop"
zum<activity>
Element. Um auf die neueste Absicht zuzugreifen (wenn Sie an Daten interessiert sind, die möglicherweise übergeben wurden), überschreiben SieonNewIntent()
IhreActivity
.quelle
Setzen Sie
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
stattdessen die Flags auf .Aus der Dokumentation zu FLAG_ACTIVITY_CLEAR_TOP (Schwerpunkt Mine):
quelle
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Verwenden Sie diese
onNewIntent()
Option, um neue Daten aus dem Benachrichtigungsklick zu verarbeiten, und aktualisieren Sie die Aktivität.Holen Sie
onNewIntent
sich die neuen Daten aus der neuen Absicht (die von der neuen Benachrichtigung bereitgestellt wurde) und fangen Sie sie ab, zum Beispiel:title = intent.getStringExtra("title")
in
onCreate
vorher :)Die aktuelle Aktivität wird mit neuen Benachrichtigungsdaten aktualisiert.
Sie können diesem Tutorial auch folgen .
quelle
Kopieren Sie einfach den Code und fügen Sie ihn in Ihre Hauptstartaktivität ein.
Hier ist die ursprüngliche Antwort
quelle
Ich denke, Sie sollten eine Logik hinzufügen, damit es funktioniert. Vielleicht kann dies helfen:
Zum Beispiel habe ich einen Begrüßungsbildschirm (Launcher und MAIN) von APP:
Und in meinem FirebaseService habe ich Folgendes getan:
quelle
quelle