Мой MainActicity
начинается RefreshService
с a, у Intent
которого есть boolean
дополнительный вызов isNextWeek
.
My 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
.
Когда я щелкаю сейчас, 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
ценность?
ОБНОВИТЬ
это решает проблему: https://stackoverflow.com/a/18049676/2180161
Quote:
Я подозреваю, что, поскольку единственное, что меняется в намерении, - это дополнительные функции,
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
.
Ответы:
Использование PendingIntent.FLAG_CANCEL_CURRENT - не лучшее решение из-за неэффективного использования памяти. Вместо этого используйте PendingIntent.FLAG_UPDATE_CURRENT .
Используйте также Intent.FLAG_ACTIVITY_SINGLE_TOP (действие не будет запущено, если оно уже запущено в верхней части стека истории).
Затем:
Теперь он должен работать.
Если вы по-прежнему не ожидаете поведения, попробуйте реализовать
void onNewIntent(Intent intent)
обработчик событий, таким образом вы сможете получить доступ к новому намерению, которое было вызвано для действия (что не то же самое, что просто вызов getIntent (), это всегда будет возвращать первое запущенное намерение ваша деятельность.источник
Я думаю, вам нужно обновить,
Intent
когда вы получите новый, переопределивonNewIntent(Intent)
в своей деятельности. Добавьте в свою деятельность следующее:Редактировать:
Это необходимо только в том случае, если ваша деятельность уже была запущена на момент получения намерения. Если ваша деятельность началась (а не просто возобновлена) по намерению, значит, проблема в другом месте, и мое предложение не поможет ее исправить.
источник
Следующий код должен работать: -
В MainActivity onCreate:
источник
new Notification(icon, message, when);
устарело