webentwicklung-frage-antwort-db.com.de

Warum verwenden wir den TaskStackBuilder?

Warum verwenden wir TaskStackBuilder beim Erstellen einer Benachrichtigung? Ich verstehe die Logik dahinter nicht.

Kann mir bitte jemand erklären.

public void showText(final String text){
    Intent intent = new Intent (this, MainActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(intent);
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(getString(R.string.app_name))
            .setAutoCancel(true)
            .setPriority(Notification.PRIORITY_MAX)
            .setDefaults(Notification.DEFAULT_VIBRATE)
            .setContentIntent(pendingIntent)
            .setContentText(text)
            .build();
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICACTION_ID, notification);
}
29
MisterNowhere

Angenommen, Sie haben eine App zum Senden von E-Mails und haben zwei Aktivitäten darin. Eines ist MainActivity, das die E-Mail-Liste enthält, und eines dient zum Anzeigen einer E-Mail (EmailViewActivity). Wenn Sie also eine neue E-Mail erhalten, wird in der Statusleiste eine Benachrichtigung angezeigt. Nun möchten Sie diese E-Mail anzeigen, wenn ein Benutzer darauf klickt, und nach dem Anzeigen der E-Mail, wenn der Benutzer auf die Zurück-Schaltfläche klickt, die E-Mail-Listenaktivität anzeigen (MainActivity). Für dieses Szenario können wir TaskStackBuilder verwenden. Siehe folgendes Beispiel:

public void showEmail(final String text){

        Intent intent = new Intent (this, MainActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(intent);
        Intent intentEmailView = new Intent (this, EmailViewActivity.class);
        intentEmailView.putExtra("EmailId","you can Pass emailId here");
        stackBuilder.addNextIntent(intentEmailView);
        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        Notification notification = new Notification.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(getString(R.string.app_name))
                .setAutoCancel(true)
                .setPriority(Notification.PRIORITY_MAX)
                .setDefaults(Notification.DEFAULT_VIBRATE)
                .setContentIntent(pendingIntent)
                .setContentText(text)
                .build();
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICACTION_ID, notification);
    }

Hoffe du kannst verstehen.

Weitere Informationen finden Sie unter den folgenden URLs: http://developer.Android.com/reference/Android/support/v4/app/TaskStackBuilder.htmlhttp://developer.Android.com) /guide/components/tasks-and-back-stack.htmlhttp://www.programcreek.com/Java-api-examples/index.php?api=Android.app.TaskStackBuilder =

57
TdSoft

Wir verwenden ein TaskStackBuilder, um sicherzustellen, dass der Zurück-Button gut abgespielt wird , wenn die Aktivität gestartet wird. Mit dem TaskStackBuilder können Sie auf den Verlauf der von der Zurück-Schaltfläche verwendeten Aktivitäten zugreifen. Grundsätzlich verwenden wir es, wenn der Benutzer nach dem Drücken der Zurück-Taste zu einer anderen Aktivität navigieren soll.

4
Dennis

Die anderen Antworten erklärten es gut: Sie verwenden eine ausstehende Absicht, um einen Benutzer zu einer Detailaktivität zu schicken, und möchten dann, dass er die Zurück-Schaltfläche verwendet, um zur Hauptaktivität zurückzukehren. Eine alternative Möglichkeit, dies festzulegen , ist .

Intent detailIntentForToday = new Intent(context, DetailActivity.class);
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context);
taskStackBuilder.addNextIntentWithParentStack(detailIntentForToday);
PendingIntent resultPendingIntent = taskStackBuilder
    .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
resultPendingIntent.send();

Dazu müssen Sie auch einstellen

Android:parentActivityName=".MainActivity"

für die DetailActivity in AndroidManifest.xml.

1
serv-inc

Zur richtigen Navigation.

1) Wenn die App über das App-Symbol gestartet wird (Normaler Fluss)

enter image description here **

2) Wenn die App durch eine Benachrichtigung gestartet wird

enter image description here

Der allgemeine Navigationsfluss in Ihrer App ist MainActivity-> DetailActivity

Aber manchmal öffnet ein Notification direkt das DetailActivity. In diesem Fall führt das Drücken der Zurück-Taste in DetailActivity nicht zur Hauptaktivität. Es ist ein ERWARTETES VERHALTEN . Sie können dies jedoch ändern, wenn Sie zurück zu MainActivity navigieren möchten.

Wie mache ich es?

1) Fügen Sie Android hinzu: parentActivityName = "com.example.myApp.MainActivity" in Ihre Aktivität

Diese Funktion wurde in Android 4.1. Wenn Sie also auf ältere Geräte abzielen möchten. Fügen Sie AUCH ein Meta-Tag hinzu .

<activity Android:name=".Activities.DetailActivity"
    Android:parentActivityName=".Activities.MainActivity">
    <meta-data
      Android:name="Android.support.PARENT_ACTIVITY"
      Android:value=".Activities.MainActivity" />
</activity>

2) Verwenden Sie TaskStackBuilder, um eine ausstehende Absicht zu erstellen.

public PendingIntent getPendingIntent(Intent intent){

    TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this);
    taskStackBuilder.addNextIntentWithParentStack(intent);
    PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

}

Übergeben Sie nun diese ausstehende Absicht, um Benachrichtigungen zu erstellen.

1
Rohit Singh