Wenn Sie eine Aktivität über eine Benachrichtigung starten, müssen Sie die erwartete Navigation. Durch Tippen auf die Schaltfläche „Zurück“ muss der Nutzer zurückgeleitet werden. während Sie den normalen Workflow der App zum Startbildschirm wechseln und die Seite "Letzte" muss die Aktivität als separate Aufgabe angezeigt werden. Um diese Navigation beizubehalten beginnen Sie mit einer neuen Aufgabe.
Der grundlegende Ansatz zum Festlegen des Tippverhaltens für Ihre Benachrichtigung wird unter
Erstellen Sie ein
Benachrichtigung.
Auf dieser Seite wird beschrieben, wie Sie ein
PendingIntent
für Ihr
Benachrichtigungsaktion, damit eine neue Aufgabe erstellt und
Stack. Vorgehensweise
hängt davon ab, welche Art von Aktivität Sie beginnen:
- Regelmäßige Aktivität
- Dies ist eine Aktivität, die Teil des normalen UX-Ablaufs Ihrer App ist. Wann? wenn der Nutzer über die Benachrichtigung zur Aktivität gelangt, muss die neue Aufgabe Fügen Sie einen vollständigen Back Stack ein, sodass Nutzende auf die Schaltfläche „Zurück“ tippen können, um zwischen ihnen zu wechseln. App-Hierarchie zu erhöhen.
- Besondere Aktivität
- Der Nutzer sieht diese Aktivität nur, wenn sie über eine Benachrichtigung gestartet wurde. In einer erweitert diese Aktivität die Benutzeroberfläche für Benachrichtigungen, indem in der Benachrichtigung selbst nur schwer anzuzeigen. Für diese Aktivität ist kein Back Stack ab.
Reguläre PendingIntent-Aktivität einrichten
Wenn du über deine Benachrichtigung eine normale Aktivität starten möchtest, richte PendingIntent
ein
mit TaskStackBuilder
So wird ein neuer Back-Stack erstellt.
Aktivitätshierarchie Ihrer App definieren
Definieren Sie die natürliche Hierarchie für Ihre Aktivitäten, indem Sie die
android:parentActivityName
jedes <activity>
-Attributs
-Element in Ihrer App-Manifestdatei. Hier ein Beispiel:
<activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- MainActivity is the parent for ResultActivity. --> <activity android:name=".ResultActivity" android:parentActivityName=".MainActivity" /> ... </activity>
PendingIntent mit Back-Stack erstellen
Um eine Aktivität zu starten, die einen Back-Stack von Aktivitäten enthält, erstellen Sie einen
Instanz von TaskStackBuilder
und rufe
addNextIntentWithParentStack()
,
Intent
für die
die Sie starten möchten.
Solange Sie die übergeordnete Aktivität für jede Aktivität wie beschrieben definieren
können Sie uns
getPendingIntent()
um eine PendingIntent
zu erhalten, die den gesamten Back Stack enthält.
Kotlin
// Create an Intent for the activity you want to start. val resultIntent = Intent(this, ResultActivity::class.java) // Create the TaskStackBuilder. val resultPendingIntent: PendingIntent? = TaskStackBuilder.create(this).run { // Add the intent, which inflates the back stack. addNextIntentWithParentStack(resultIntent) // Get the PendingIntent containing the entire back stack. getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) }
Java
// Create an Intent for the activity you want to start. Intent resultIntent = new Intent(this, ResultActivity.class); // Create the TaskStackBuilder and add the intent, which inflates the back // stack. TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addNextIntentWithParentStack(resultIntent); // Get the PendingIntent containing the entire back stack. PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
Bei Bedarf können Sie Intent
-Objekten im Stack Argumente durch folgenden Aufruf hinzufügen:
TaskStackBuilder.editIntentAt()
Dies ist manchmal erforderlich, um sicherzustellen, dass eine Aktivität im Back-Stack
werden aussagekräftige Daten angezeigt,
wenn Nutzende zu diesen navigieren.
Anschließend können Sie wie gewohnt die PendingIntent
an die Benachrichtigung übergeben:
Kotlin
val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply { setContentIntent(resultPendingIntent) ... } with(NotificationManagerCompat.from(this)) { notify(NOTIFICATION_ID, builder.build()) }
Java
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID); builder.setContentIntent(resultPendingIntent); ... NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, builder.build());
Spezielle Aktivität PendingIntent einrichten
Weil für eine bestimmte Aktivität, die von einer Benachrichtigung ausgeht, kein Zurück
können Sie den PendingIntent
erstellen, indem Sie
getActivity()
Definieren Sie jedoch die entsprechenden Aufgabenoptionen im Manifest.
-
Fügen Sie in Ihrem Manifest die folgenden Attribute zum
<activity>
-Element.-
android:taskAffinity=""
-
In Kombination mit den
FLAG_ACTIVITY_NEW_TASK
im Code verwenden, lassen Sie dieses Attribut leer, wird diese Aktivität nicht in die Standardaufgabe der App aufgenommen. Beliebig Aufgaben, die die Standardaffinität der App haben, betroffen sind. -
android:excludeFromRecents="true"
- Schließt die neue Aufgabe vom Bildschirm „Letzte“ aus, sodass der Nutzer versehentlich wieder dorthin zurückkehren.
Dies wird im folgenden Beispiel gezeigt:
<activity android:name=".ResultActivity" android:launchMode="singleTask" android:taskAffinity="" android:excludeFromRecents="true"> </activity>
-
-
Erstellen Sie die Benachrichtigung und geben Sie sie aus:
<ph type="x-smartling-placeholder">
- </ph>
-
Erstellen Sie eine
Intent
, die denActivity
. -
Legen Sie fest, dass
Activity
mit einer neuen, leeren Aufgabe beginnt, indem Sie AnrufensetFlags()
mit den FlagsFLAG_ACTIVITY_NEW_TASK
undFLAG_ACTIVITY_CLEAR_TASK
. -
Erstellen Sie ein
PendingIntent
, indem Sie folgenden Befehl aufrufen:getActivity()
.
Dies wird im folgenden Beispiel gezeigt:
Kotlin
val notifyIntent = Intent(this, ResultActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } val notifyPendingIntent = PendingIntent.getActivity( this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE )
Java
Intent notifyIntent = new Intent(this, ResultActivity.class); // Set the Activity to start in a new, empty task. notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Create the PendingIntent. PendingIntent notifyPendingIntent = PendingIntent.getActivity( this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE );
-
Erstellen Sie eine
- Übergib
PendingIntent
wie gewohnt an die Benachrichtigung:Kotlin
val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply { setContentIntent(notifyPendingIntent) ... } with(NotificationManagerCompat.from(this)) { notify(NOTIFICATION_ID, builder.build()) }
Java
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID); builder.setContentIntent(notifyPendingIntent); ... NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, builder.build());
Weitere Informationen zu den verschiedenen Aufgabenoptionen und zum Back-Stack finden Sie unter Aufgaben und Back-Stack.