Обработка нескольких уведомлений

У меня возникли проблемы с определением Intent, PendingIntent, фильтров и флагов для уведомлений.

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

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

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

Есть еще одна вещь, которую можно использовать с помощью Фильтров, чтобы запретить приложению запускать новый экземпляр MainActivity каждый раз, когда нажимается уведомление.

Notification_ID различаются для каждого уведомления.

public class AlarmSchedulingService extends IntentService {
private NotificationManager mNotificationManager;
public AlarmSchedulingService() {
    super("SchedulingService");
}

protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();
        sendNotification(extras.getInt(KEY_EXTRAS_NOTIFICATION_ID));
}

public void sendNotification(int NOTIFICATION_ID) {
mNotificationManager = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(keyName, extraData); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            intent,  PendingIntent.FLAG_UPDATE_CURRENT);

    // use the right class it should be called from the where alarms are set
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this)
            .setAutoCancel(true)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(titleString)
            .setStyle(
                    new NotificationCompat.BigTextStyle()
                            .bigText(messageString))
            .setDefaults(
                Notification.DEFAULT_SOUND
                | Notification.DEFAULT_LIGHTS)

            .setContentText(messageString);
        mBuilder.setContentIntent(contentIntent);

    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
     }
 }

person mushahid    schedule 11.06.2015    source источник
comment
Вы можете сравнить идентификаторы в своем широковещательном приемнике, отправив их в дополнении о намерениях.   -  person Apurva Kolapkar    schedule 11.06.2015
comment
да, я уже проверил это, все они имеют один и тот же Notification_ID, где я назначаю каждому уникальный Notification_ID. Все они имеют последний назначенный Notification_ID, их собственный Notification_ID перезаписывается последним самым   -  person mushahid    schedule 11.06.2015
comment
теперь ясно, что ваш идентификатор перезаписывается, пожалуйста, отладьте и проверьте.   -  person Apurva Kolapkar    schedule 11.06.2015
comment
Пожалуйста, напишите, где именно вы генерируете уникальный идентификатор уведомления. Менеджер уведомлений Android не может перезаписать идентификатор уведомления последним. Пожалуйста, перепроверьте свой код.   -  person siva    schedule 11.06.2015


Ответы (1)


Это показывает, что:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            intent,  PendingIntent.FLAG_UPDATE_CURRENT);

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

person Apurva Kolapkar    schedule 11.06.2015
comment
Это не идентификатор уведомления. Это параметр requestCode для PendingIntent. Ваше предложение правильное: это должно быть уникальным, но объяснение неверно. - person David Wasser; 11.06.2015