android - notification - ¿Por qué usamos el TaskStackBuilder?
progress notification android (3)
Las otras respuestas lo explicaron muy bien: usa un intento pendiente para enviar a un usuario a una actividad detallada, luego quiere que use el botón Atrás para volver a la actividad principal. Una forma alternativa de configurar esto is
Intent detailIntentForToday = new Intent(context, DetailActivity.class); TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context); taskStackBuilder.addNextIntentWithParentStack(detailIntentForToday); PendingIntent resultPendingIntent = taskStackBuilder .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Para esto, también es necesario configurar
android:parentActivityName=".MainActivity"
para DetailActivity
en AndroidManifest.xml
.
¿Por qué usamos el TaskStackBuilder
cuando creamos una notificación? No consigo la lógica detrás de eso.
¿Puede alguien explicar por favor.
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);
}
Supongamos que tiene una aplicación de envío de correo electrónico y tiene dos actividades en ella. Uno es MainActivity
que tiene la lista de correo electrónico y el otro es para mostrar un correo electrónico ( EmailViewActivity
). Así que ahora, cuando recibe un nuevo correo electrónico, muestra una notificación en la barra de estado. Y ahora desea ver ese correo electrónico cuando un usuario hace clic en él y también después de mostrar el correo electrónico, si el usuario hace clic en el botón Atrás, desea mostrar la actividad de la lista de correo electrónico ( MainActivity
). Para este escenario podemos utilizar TaskStackBuilder
. Vea el siguiente ejemplo:
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);
}
Espero que puedas entenderlo.
Siga las siguientes urls para obtener más información: http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html http://developer.android.com/guide/components/tasks-and-back-stack.html http://www.programcreek.com/java-api-examples/index.php?api=android.app.TaskStackBuilder
Usamos un TaskStackBuilder
para asegurarnos de que el botón Atrás se reproducirá bien cuando TaskStackBuilder
la actividad. El TaskStackBuilder
permite acceder al historial de actividades utilizado por el botón Atrás . Básicamente, lo usamos cuando queremos que el usuario navegue a otra actividad después de presionar el botón Atrás.