Intereting Posts
Can android загрузить dll из sdcard в основном режиме Android MediaPlayer не воспроизводит mp3-файл Разница между onScroll () и onFling () GestureDetector Может ли платное приложение тестироваться в альфа-бетах бесплатно? Android – обнаруживает маленький планшет против большого телефона? Как очистить данные намерения в Activity после открытия с url? Android In-App Billing: Security.java говорит: «Подтверждение подписи завершено» Как запустить контекстную панель действий для текстового просмотра программно с копиями опций по умолчанию и выбрать все? Android: создание растрового изображения с содержимым SurfaceView Не выбран целевой рендеринг с помощью Android Studio Получение AppCompat не поддерживает текущее исключение функций темы после обновления до версии AppCompat v22.1.0 Управление соединениями SQLite на Android Привести фронт существующего фрагмента Восстановить backstack в Android Как сделать первый символ намного больше, чем другой в TextView

Обрабатывать несколько уведомлений / Укладку уведомлений от 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 */;