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

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


person Tung Nguyen    schedule 17.06.2011    source источник


Ответы (3)


Ознакомьтесь с ответом здесь: Как дать счетчик если имеется более одного уведомления

Вам просто нужно установить 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 (см. руководство). Чтобы проверить, когда пользователь очищает уведомления, необходимо использовать Уведомление. Builder, который доступен только в API уровня 11.

person Mortimer    schedule 06.09.2011
comment
Обновление: теперь вы можете использовать класс NotificationCompat в пакете поддержки Android. developer.android.com/intl/es/ ссылка/android/поддержка/v4/приложение/ - person Bharath Mg; 13.02.2014
comment
@BharathMg Я не могу найти номер в NotificationxCompact! - person Dr.jacky; 13.05.2015

Ну, эти коды работают для меня:

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; отвечает за подсчет уведомлений

person dondondon    schedule 14.06.2015

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

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

person Aleadam    schedule 17.06.2011
comment
@ Aleadam: я уже добавляю счетчик в SharedPreferences, но не знаю, как определить, прочитано уведомление или не прочитано, и установить значение счетчика? Как я могу поймать эти события? - person Tung Nguyen; 18.06.2011
comment
есть собственный способ сделать это с Android без использования ваших собственных растровых изображений. См. stackoverflow.com/questions/7203541/ - person Mortimer; 06.09.2011