Почему мы используем TaskStackBuilder?
Почему мы используем TaskStackBuilder
при создании уведомления? Я не понимаю его логики.
Может кто-нибудь объяснит.
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);
}
Ответы
Ответ 1
Предположим, у вас есть приложение для отправки электронной почты, и у вас есть два действия в нем. Одним из них является MainActivity
котором есть список адресов электронной почты, а другим - отображение электронной почты (EmailViewActivity
). Поэтому теперь, когда вы получаете новое электронное письмо, вы отображаете уведомление в строке состояния. И теперь вы хотите просмотреть это электронное письмо, когда пользователь нажимает на него, а также после отображения электронного письма, если пользователь нажимает кнопку "Назад", вы хотите показать активность в списке электронной почты (MainActivity
). Для этого сценария мы можем использовать TaskStackBuilder
. Смотрите ниже пример:
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);
}
Надеюсь, вы понимаете.
Ниже приведены ссылки для получения более подробной информации: 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
Ответ 2
Мы используем TaskStackBuilder
, чтобы убедиться, что кнопка назад будет играть хорошо, когда начнется действие. TaskStackBuilder
позволяет получить доступ к истории действий, используемых кнопкой "Назад" . В основном мы используем его, когда хотим, чтобы пользователь перешел к другому действию после нажатия кнопки возврата.
Ответ 3
Другие ответы объяснили это хорошо: вы используете ожидающее намерение отправить пользователя в подробное действие, затем вы хотите, чтобы они использовали кнопку "Назад", чтобы вернуться к основному действию. Альтернативный способ установить это является
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();
Для этого вам также необходимо установить
android:parentActivityName=".MainActivity"
для DetailActivity
в AndroidManifest.xml
.
Ответ 4
Для обеспечения правильной навигации.
1) Когда приложение запускается значком приложения (Normal Flow)
**
2) Когда приложение запускается с помощью какого-либо уведомления
![enter image description here]()
Общий поток навигации в вашем приложении MainActivity-> DetailActivity
Но иногда Notification
может напрямую открыть DetailActivity
. В этом случае нажатие кнопки "Назад" в DetailActivity
не приведет к "MainActivity". Это ОЖИДАЕМОЕ ПОВЕДЕНИЕ. Однако вы можете изменить это, если хотите вернуться обратно к MainActivity.
Как мне это сделать?
1) Добавьте android: parentActivityName = "com.example.myApp.MainActivity в свою активность
Эта функция была добавлена в Android 4.1. Так что, если вы хотите настроить таргетинг на старые устройства. Добавьте метатег ТАКЖЕ.
<activity android:name=".Activities.DetailActivity"
android:parentActivityName=".Activities.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".Activities.MainActivity" />
</activity>
2) Используйте TaskStackBuilder для создания отложенного намерения.
public PendingIntent getPendingIntent(Intent intent){
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this);
taskStackBuilder.addNextIntentWithParentStack(intent);
PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
}
Теперь передайте это ожидающее намерение для создания уведомлений.