Подтвердить что ты не робот

Дополнительные намерения дублируются при использовании FLAG_UPDATE_CURRENT в PendingIntent при создании уведомлений об андроидах

Я хочу создать несколько уведомлений, которые запускают действие (или обновляют его) для отображения описания продукта.

Notification notification = new Notification(R.drawable.applicationicon,
            Resources.getString("NewSaleNotification", context),
            System.currentTimeMillis());
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent intent = new Intent(context, MainApplication.class);
intent.putExtra("saleid", saleid);

// to be sure the activity won't be restarted
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, SaleTitle, SaleMessage, pendingIntent);
notificationManager.notify(saleid, notification);

Когда я создаю PendingIntent, у меня есть 4 варианта: FLAG_CANCEL_CURRENT, FLAG_NO_CREATE, FLAG_ONE_SHOT и FLAG_UPDATE_CURRENT.

Определение последнего (http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT) - это то, что я хочу сделать, но оно не работает должным образом. Если я создам 2 уведомления, они оба имеют тот же самый "saleid", который является последним. Как я могу сделать несколько уведомлений с разными "saleid" extra?

4b9b3361

Ответ 1

но он не работает, как следует

Да, да.

Если я создам 2 уведомления, они оба имеют тот же самый "saleid", который является последним.

Именно это означает документация.

Как я могу сделать несколько уведомлений с дополнительной продажей differents?

Вариант №1: Поместите другую строку действий в каждый из ваших Intents. Это сделает их разными (с точки зрения filterEquals()) и даст им отдельный PendingIntents. Однако, поскольку вы указываете компонент в Intent (MainApplication.class), действие не повлияет на то, как маршрутизируется Intent.

Вариант № 2: используйте requestCode (второй параметр) для вызовов getActivity(). Хотя это задокументировано как "в настоящее время не используется", это приводит к возврату объектов PendingIntent. Однако, поскольку это поведение недокументировано, оно может измениться в будущем.