Intereting Posts
AlertDialog Theme: Как изменить цвет текста элемента? Невидимые значки элементов ActionMode в Theme.Sherlock.Light.DarkActionBar Как захватить событие onclick в отключенном EditText в приложении для Android Как реализовать «Таблицы данных» (компонент дизайна материалов) в android? React Native: измените путь файла записи index.android.js на указанный путь к произвольному файлу Как получить доступ к внешнему хранилищу с кордовыми файлами / файловыми системными плагинами? Как открыть PDF через Intent с SD-карты Время компиляции Android с гнездом чрезвычайно медленное Android-анимация fadein с задержками Регистр вещательного приемника в манифесте против активности Невозможно использовать srcCompat для ImageViews в android Добавление бесконечного фона параллакса в cocos2d android Отправка почты в андроид без использования SMTP Как получить элементы в навигационном ящике для изменения вида Android: как разделить код между проектами, подписанными с тем же сертификатом

Android – создайте уведомление, TaskStackBuilder.addParentStack не работает

Я пытаюсь запустить мероприятие из уведомления, как объясняют документы Android, но когда я открываю уведомление и затем нажимаю кнопку «Назад», HomeActivity (родительский) не открывается, вместо этого приложение закрывается. Что я делаю не так?

Intent resultIntent = new Intent(context, MatchActivity.class);; resultIntent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); // Adds the back stack for the Intent (but not the Intent itself) stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); 

Solutions Collecting From Web of "Android – создайте уведомление, TaskStackBuilder.addParentStack не работает"

Вам нужно добавить родительский стек для запускаемой вами активности, а не ее родителя.

Заменить:

 stackBuilder.addParentStack(MainActivity.class); 

с:

 stackBuilder.addParentStack( MatchActivity.class ); 

Это предполагает, что вы определили родителя в манифесте (API 16+):

 <activity android:name=".MatchActivity" android:parentActivityName=".MainActivity" ... /> 

Если вы разрабатываете для API 16, то вы должны определить родителя как:

 <activity android:name=".MatchActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> 

Если ни одно из решений не работает, и вы уверены, что внимательно следили за ним … тогда вам нужно удалить приложение и переустановить его. Работал для меня!

Использование TaskStackBuilder не решило мою проблему и работает только для Honeycomb и больше. Поэтому я принимаю следующее решение (пожалуйста, не распни меня):

  1. Вызовите MainActivity вместо MatchActivity , передав MatchActivity качестве аргумента (по Intent).
  2. В MainActivity.onCreate запустите MatchActivity если параметр доступен.

Новый код:

 Intent resultIntent = new Intent(context, MainActivity.class) // .putExtra(MainActivity.ACTIVITY_EXTRA, MatchActivity.class.getName()) // .putExtra("Pass extras to MatchActivity", "if you want! :)"); PendingIntent pendingIntent = PendingIntent.getActivity(context, visitId, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); Notification notification = new NotificationCompat.Builder(context) // .setContentIntent(pendingIntent) // .build(); 

На MainActivity :

 public static final String ACTIVITY_EXTRA = "activity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getStringExtra(ACTIVITY_EXTRA) != null) { startActivity(new Intent(getIntent()).setClassName(this, getIntent().getStringExtra(ACTIVITY_EXTRA))); } ... } 
 Intent resultIntent = new Intent(App.getContext(), TargetActivity.class); Intent backIntent = new Intent(App.getContext(), ParentActivity.class); backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); final PendingIntent resultPendingIntent = PendingIntent.getActivities( App.getContext(), 0, new Intent[]{backIntent, resultIntent}, PendingIntent.FLAG_ONE_SHOT); mNotifyBuilder.setContentIntent(resultPendingIntent); 

Это решило мою проблему с родительским стеком на Notification Click

Вы просмотрели документацию по Android, в частности, руководство API уведомлений . В нем описывается, как это сделать подробно.

Обратите внимание, что если действие, которое вы начинаете с уведомления, не является частью обычного потока активности, оно не должно идти на начальную страницу приложения; Вместо этого он должен перейти на главный экран.

Как указано в других ответах, TaskStackBuilder не работает для версий ниже Honeycomb.

Моим решением было переопределить метод onBackPressed() .

 @Override public void onBackPressed() { NavUtils.navigateUpFromSameTask(this); } 

Очевидно, что если вы планируете завершить свою деятельность каким-то другим способом, вам тоже придется это обработать. (Хотя я предполагаю, что переопределение finish() будет иметь некоторое неожиданное поведение).

Вы должны добавить это в MainActivity на AndroidManifest:

 <activity android:name=".MainActivity" android:allowTaskReparenting="true" /> 

Для меня stackBuilder.addParentStack не работает.

Я в конечном итоге делаю это, надеюсь, что это может вам помочь.

  Intent intent = new Intent(context, MatchActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); // Adds the back stack for the Intent stackBuilder.addNextIntentWithParentStack(new Intent(context, MainActivity.class)); stackBuilder.addNextIntent(intent); PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

У меня такая же проблема! Решать:

переключить на

 PendingIntent resultPendingIntent = PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

Если вы используете генерацию кода в своем проекте (например, Dagger), MainActivity.class следует заменить на MainActivity_.class (или независимо от имени вашего родительского действия). Принял меня целый день, чтобы понять это. Надеюсь, это может спасти чей-то день.