Моя MainActicity запускает RefreshService с Intent который имеет boolean isNextWeek.
Мой RefreshService создает Notification которое запускает мою MainActivity когда пользователь нажимает на нее.
это выглядит так:
Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);
Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
notification = builder.build();
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NOTIFICATION_REFRESH, notification);
Как вы можете видеть notificationIntent должны иметь boolean дополнительное IS_NEXT_WEEK со значением isNextWeek, который ставится в PendingIntent.
Когда я isNextWeek сейчас это Notification я всегда получаю false как значение isNextWeek
Вот как я получаю значение в MainActivity:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
Журнал:
08-04 00:19:32.500 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
Когда я непосредственно запускаю MainActivity с Intent с "sNextValue", как это:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
все работает отлично, и я получаю true когда isNextWeek это true.
Что я делаю не так, что всегда есть false значение?
ОБНОВИТЬ
это решает проблему: qaru.site/info/63532/...
Цитата:
Я подозреваю, что, поскольку в Intent изменяются только дополнительные
PendingIntent.getActivity(...)фабричный методPendingIntent.getActivity(...)просто повторно использует старое намерение в качестве оптимизации.В RefreshService попробуйте:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);Увидеть:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
ОБНОВЛЕНИЕ 2
Смотрите ответ ниже, почему лучше использовать PendingIntent.FLAG_UPDATE_CURRENT.