Android: управление несколькими push-уведомлениями на устройстве приложения

Я разрабатываю приложение, в котором реализована функция Push-уведомлений. Мой код onMessage - GCMIntentService.java:

@Override
protected void onMessage(Context context, Intent data) {
    String message = data.getExtras().getString("message");

    displayMessage(context, message);
    generateNotification(context, message);
}

И код generateNotification -

private static void generateNotification(Context context, String message) {
    int icon = R.drawable.ic_launcher;
    long when = System.currentTimeMillis();
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(icon, message, when);

    String title = context.getString(R.string.app_name);

    Intent notificationIntent = new Intent(context, GCMMessageView.class);

    notificationIntent.putExtra("message", message);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);

    notification.setLatestEventInfo(context, title, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    // Play default notification sound
    notification.defaults |= Notification.DEFAULT_SOUND;

    // Vibrate if vibrate is enabled
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notificationManager.notify(0, notification);
}

Этот код работает нормально. Я получаю push-сообщение и уведомление.

=>Но когда я отправляю более одного сообщения, уведомление переписывается. И я могу видеть только последнее уведомление в строке состояния.

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

Поэтому, пожалуйста, помогите мне, что я должен сделать для этого в моем коде.




Ответы (4)


Попробуйте указать другой идентификатор уведомления (например, nid) и уведомлять вместо 0 для каждого нового уведомления, это предотвратит перезапись вашего уведомления.

  PendingIntent intent = PendingIntent.getActivity(context, nid,notificationIntent, 0);

а также

notificationManager.notify(nid, notification);

Надеюсь, что это поможет вам

person Systematix Infotech    schedule 04.04.2014
comment
Вы спасли мой день. Когда было доставлено несколько push-уведомлений, для каждого уведомления выполнялось только последнее ожидающее намерение. После того, как я изменил 0 на уведомления Id, это было исправлено. - person CoolMind; 31.10.2019

Получить случайные числа:

Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;

Вместо:

notificationManager.notify(0, notification);

использовать:

notificationManager.notify(m, notification);
person Rooban    schedule 24.12.2015

Вам нужно обновить Notification ID, когда вы запускаете Notification. в

notificationManager.notify(ID, notification);

Как?

Чтобы настроить уведомление таким образом, чтобы оно могло отличаться, выдайте его с идентификатором уведомления, вызвав NotificationManager.notify(ID, notification).. Чтобы изменить это уведомление после его отправки, создайте объект NotificationCompat.Builder, создайте из него объект Notification и отправьте Notification с помощью Different ID вы не использовались ранее.

Если предыдущее уведомление все еще отображается, система обновляет его из содержимого файла Notification object. Если предыдущее уведомление было отклонено, вместо него создается новое уведомление.

Для получения дополнительной информации см. официальные документы.

person M D    schedule 04.04.2014

привет, вам нужно передать уникальный идентификатор уведомления в методе уведомления. Ниже приведен код для передачи уникального идентификатора уведомления:

//"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences.
String notificationId = CommonUtilities.getValueFromPreference(context, Global.NOTIFICATION_ID, "0");
int notificationIdinInt = Integer.parseInt(notificationId);

notificationManager.notify(notificationIdinInt, notification);

// will increment notification id for uniqueness
notificationIdinInt = notificationIdinInt + 1;
CommonUtilities.saveValueToPreference(context, Global.NOTIFICATION_ID, notificationIdinInt + "");
//Above "CommonUtilities.saveValueToPreference" is the method created by me to save new value in savePreferences.

Дайте мне знать, если вам нужна более подробная информация или любой запрос. :)

person Gaurav Darji    schedule 18.09.2014