Пин-уведомление в верхней части области уведомлений - PullRequest
12 голосов
/ 31 мая 2011

У меня есть уведомление, которое обновляется (т.е. отправляется) каждые три секунды. Я установил флаг 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);

Ответы [ 8 ]

19 голосов
/ 05 января 2012

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

В классе Notification есть открытое поле с именем , когда .Согласно API:

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

Поведение по умолчанию (как для кода, так и для кодеров :) - это , когда отметка времени уведомления:

notification.when = System.currentTimeMillis();

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

notification.when = previousTimestamp;

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

5 голосов
/ 09 июня 2011

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

3 голосов
/ 01 июня 2011

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

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

1 голос
/ 14 июня 2011

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

1 голос
/ 09 июня 2011

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

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

1 голос
/ 31 мая 2011

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

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

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

Уведомление

NotificationManager

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

0 голосов
/ 07 января 2017

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

0 голосов
/ 08 февраля 2012

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

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

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