Intereting Posts
Как изменить направление скобок (для текста справа налево) для арабского языка Можно ли создать приложение Android с помощью PhoneGap строго внутри Visual Studio? Как принести изображениеView перед картой? Когда оба имеют дочерние элементы Relative Layout Отображение скрытой анимации панели инструментов не гладкой Текстовое поле скрыто, когда клавиатура Android открыта в телефоне Как отображать изображение в TextView от Android? Разрешить внешнее касание для DialogFragment Как получить направление компаса Аннулирование HTTP-прокси-сервера для эмулятора Android Android TextView Обоснование текста Как отформатировать значение Float в формате валюты устройства? Тонкий синий индикатор выполнения Android textview break line поведение (как разбить последнее слово) Использование нового провайдера контента Telephony для чтения SMS Android AlarmManager иногда запускается поздно, если телефон работает от аккумулятора

Обрабатывать несколько уведомлений / Укладку уведомлений от GCM

Я только что внедрил GCM и уведомления в своем приложении для Android, исходя из веб-сервера на базе Apache / PHP.
Уведомления уже работают, но я застрял в укладке уведомлений, как описано здесь .

То, что я пытаюсь сделать

У меня есть два типа уведомлений в моем приложении, используя данные, поступающие из службы GCM:

Тип 1 (Сообщения):

[data] => Array ( [t] => 1 [other data...] ) 

Тип 2 (Новости):

 [data] => Array ( [t] => 2 [other data...] ) 

Эти 2 типа представляют собой совершенно разные уведомления, и я хотел бы убрать их оба отдельно друг от друга, но я не могу заставить это работать. Я хотел бы складывать их так, как только есть несколько уведомлений:

Вид по умолчанию
Уведомления о штабелировании


Расширенный просмотр
Уведомления о штабелировании 2


Что я пробовал

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

 if (msg.get("t").toString().equals("1")) { notificationNumber = messageCounter.incrementAndGet(); } else { notificationNumber = newsCounter.incrementAndGet(); } [...] NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setNumber(notificationNumber); 

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

Уникальные идентификационные идентификаторы
Я также пытался использовать уникальные идентификаторы, сгенерированные с помощью

 Date now = new Date(); Notification_id = now.getTime(); 

Так что нет никакой укладки или переопределения вообще.

Вопрос

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

Я наконец нашел решение и закончил использование атомных целых чисел, но в отдельном классе:

 import java.util.concurrent.atomic.AtomicInteger; public class Global { public static AtomicInteger Counter1 = new AtomicInteger(); public static AtomicInteger Counter2 = new AtomicInteger(); } 

Чтобы сбросить счетчик после открытия приложения, я поместил его в свой MainActivity (вызываемый в onCreate() и onResume() :

 private void clearNotifications(){ NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.cancelAll(); Global.Counter1.set(0); Global.Counter2.set(0); } 

Когда я создаю уведомление, я проверяю счетчик:

 Counter1 = Global.Counter1.incrementAndGet(); ContentText = (Counter1 < 2) ? /* Single notification */ : /* Stacking */;