Уведомление о контакте в верхней части области уведомлений

У меня есть уведомление, которое обновляется (т.е. отправляется) каждые три секунды. Я установил флаг FLAG_ONGOING_EVENT и флаг FLAG_NO_CLEAR, чтобы он всегда показывался. Проблема в том, что если, например, загрузка активна (в которой отображается индикатор выполнения в области уведомлений), оба уведомления постоянно переключают позиции, поскольку они обновляются каждые несколько секунд.

Как я могу привязать свое уведомление к началу списка (или к какой-то статической позиции), чтобы он не перескакивал каждый раз, когда я обновляю его, вызывая NotificationManager.notify() ?

Изменить: Вот код для обновления уведомления. Он запускается каждые три секунды.

 Notification notification = new Notification(); notification.contentView = appBarNotification; // this sets the changed notification content notification.flags |= Notification.FLAG_ONGOING_EVENT; notification.flags |= Notification.FLAG_NO_CLEAR; Intent notificationIntent = new Intent(); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.contentIntent = contentIntent; notification.icon = R.drawable.icon; nm.notify(APP_BAR_NOTIFICATION, notification); 

Solutions Collecting From Web of "Уведомление о контакте в верхней части области уведомлений"

Существует решение, которое делает именно то, что вы хотите.

В классе « Уведомление » есть публичное поле, называемое когда . Согласно API:

Временная метка для уведомления. Значки и расширенные виды сортируются по этому ключу.

Поведение по умолчанию (для кодов и кодеров одинаково 🙂 должно указывать, когда отметка времени уведомления:

 notification.when = System.currentTimeMillis(); 

Итак – для поддержания правильного порядка уведомлений все, что вам нужно сделать, это дать ему предварительно установленную временную метку:

 notification.when = previousTimestamp; 

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

Вы не должны отправлять уведомление. Просто используйте текущий флаг события, как и в вашем коде. Другие уведомления могут появляться и скрывать ваши, но это именно то, как работает Android.

Вы отправляете новое уведомление каждый раз или обновляете существующее? Можете ли вы опубликовать код?

Тем временем вы можете вообще отвечать на такие вопросы, как «Могу ли я привязывать свое уведомление к статическому положению или к началу списка», думая «Подождите, что произойдет, если две или более программы попытаются прикрепить свое уведомление к первый?" И понимая, что гонка вооружений, которая будет возникать среди программ, когда они будут пытаться все труднее убедиться, что их уведомление является первым, – это то, почему эта функция не поддерживается.

Прошло некоторое время с тех пор, как я сделал код для Android, но если я правильно помню, всякий раз, когда вы вызываете NotificationManager.notify() , это связано с тем, что вы хотите предупредить пользователя об изменении или вспышке значка. Однако существуют способы изменения фактических уведомлений, которые вы отправляете.

Вы также можете вызвать .cancel() если это поможет.

Для получения справки обратитесь к документации по API Android, хотя вы, вероятно, уже видели их:

уведомление

NotificationManager

Надеюсь, что это помогло!

Существует флаг текущего события. http://developer.android.com/reference/android/app/Notification.html#FLAG_ONGOING_EVENT

Вам не нужен флаг Notification.FLAG_NO_CLEAR.

Вы сказали, что ваше уведомление отображает список запущенных приложений. Почему вы повторно отправляете уведомление каждые 3 секунды? Почему бы не повторно отправить уведомление только в том случае, если список приложений изменился. Это напрямую не решает вашу проблему, но это резко сокращает ее.

Добавляя файл .setSortKey (String) к вашему строителю уведомлений, вы можете получать уведомления в постоянном лексикографическом / алфавитном порядке.

Просто примечание для других людей, которые сталкиваются с этой проблемой –

Ответ Вайдена исправил мою проблему, когда мое текущее уведомление продолжало прыгать. Это произошло только с нашим приложением по ICS 4.0.3 по какой-то причине, я думаю, это связано с тем, что ICS обрабатывает уведомления по-разному от более старых версий. Также отметить – на планшетах нет «текущих» и обычных разделов уведомлений, например, в более старых версиях (Gingerbread). Приказ сохраняется, хотя и не классифицируется. Не уверен, что это относится к телефонам на ICS.