Как подсчитать количество уведомлений и отобразить один значок в Android?

У меня есть несколько уведомлений на Android, но когда я отправляю сообщение с моего веб-сервера, устройство Android создает новый значок уведомления в строке состояния. Я хочу подсчитать количество непрочитанных уведомлений, отобразить их на statusbar с одним значком, а когда уведомление будет прочитано, уведомление должно изменить количество непрочитанных уведомлений. Как мне это сделать? Это выглядит как "3 Другие" на этом изображении: Значок уведомления

Ответ 1

Посмотрите ответ здесь: Как предоставить счетчик, если есть несколько уведомлений

Вам просто нужно установить Notification.number:

Notification notification = new Notification(R.drawable.direction, "Cool Notification",
                System.currentTimeMillis());
        /********LIKE THIS*********/
        notification.number = notificationCount++;
        /********LIKE THIS*********/

        notification.setLatestEventInfo(context, "Cool Notification Title",
                "updated notificaiton message", null);


        NotificationManager nm = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        nm.notify(R.id.my_motification, notification);

Вы должны отправить свое уведомление с помощью метода NotificationManager.notify с одинаковым идентификатором все время. Как указывается в документации, идентификатор является уникальным идентификатором для этого уведомления в вашем приложении. Если вы повторно используете один и тот же идентификатор, он просто обновит текст и номер для этого уведомления.

Чтобы проверить, когда пользователь нажимает на уведомление, вам необходимо предоставить PendingIntent (см. учебник). Чтобы проверить, когда пользователь очищает уведомления, вам необходимо использовать Notification.Builder, который доступен только на уровне Api 11.

Ответ 2

Хорошо эти коды работают для меня:

Notification n = new Notification(R.drawable.yourownpicturehere, 
                                   getString(R.string.noticeMe), 

System.currentTimeMillis());    
PendingIntent i=PendingIntent.getActivity(this, 0,
                                           new Intent(this, NotifyActivity.class),0);

n.setLatestEventInfo(getApplicationContext(), 
                     getString(R.string.title),
                     getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;

// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr = (NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);

Следуйте этой для полного учебника.
Я думаю, что n.number=++count; отвечает за подсчет уведомления

Ответ 3

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

Чтобы отслеживать уведомления, вы можете просто установить счетчик в SharedPreferences, добавить его с каждым новым уведомлением и уменьшить на единицу при чтении уведомления (или на ноль, если вы одновременно показываете все уведомления).