Как добавить значок уведомления/текущего события в определенную позицию в строке состояния?

Я хочу поместить значок текущего события в строку состояния на 2-м месте, как это делает Skype при входе в систему.


person Jayesh Tembhekar    schedule 04.01.2012    source источник
comment
Вы имеете в виду создание пользовательского макета уведомлений ??   -  person jennifer    schedule 04.01.2012
comment
Нет. Я хочу поместить значок строки состояния (например, другое приложение или значок батареи в строку состояния) в положение, скажем, 1-е. Так что он не будет скрываться / исчезать даже после появления нового значка текущего события в строке состояния. см.: i.stack.imgur.com/KkHW2.png скриншот для значка присутствия P .   -  person Jayesh Tembhekar    schedule 04.01.2012
comment
Уведомления имеют как явный, так и неявный приоритет, устанавливаемый системой в зависимости от времени выдачи уведомления и других факторов. Я уверен, что если вы повысите приоритет, чтобы он соответствовал приоритету Skype, Skype больше не будет иметь приоритета. Это тот же порядок, в котором уведомления появляются и в ящике.   -  person dcow    schedule 20.02.2014


Ответы (4)


Поскольку диспетчер уведомлений управляет уведомлениями, это невозможно. Единственный способ добраться до первой позиции — иметь Сервис и вызывать startForeground() - но если другая служба уже сделала то же самое, ваше уведомление будет на второй позиции.

Кроме этого, нет другого способа повлиять на позицию. Если вы создаете свое уведомление первым, вы находитесь на первом месте. Если другое приложение создаст уведомление первым, вы будете вторым.

person Force    schedule 04.01.2012
comment
Нет это не так. Вероятно, это связано с тем, что у вас уже запущена другая служба. - person Force; 04.01.2012
comment
Я создал три приложения, которые запускают службу с помощью stratForeground() и запускают уведомление с флагом Notification.FLAG_ONGOING_EVENT. Устанавливал и запускал их один за другим, значок последнего/третьего приложения скрывался из строки состояния. Но в конце я запустил скайп и его иконка оказалась впереди всех. Два других моих значка приложения спрятались. - person Jayesh Tembhekar; 04.01.2012

Итак, я погуглил этот ответ и нашел этот вопрос на удивительном StackOverflow. Хотя Notification.priority = Notification.PRIORITY_MIN работает для API 16 и выше, выполнение

Notification.when = 0

прекрасно работает для API ‹ 16.

person Seth    schedule 06.01.2013

http://grail.cba.csuohio.edu/~matos/notes/cis-493/lecture-notes/Android-Chapter23-Notifications.pdf

отличный документ!

Посмотрите пример:

Произвести уведомление. Разрешите пользователю щелкнуть панель уведомлений и выполнить соответствующие действия, чтобы получить доступ к сообщению.

Извините, что просто размещаю ссылки. Но я считаю, что это также будет полезно: сервис в Android

person TryTryAgain    schedule 04.01.2012
comment
Пожалуйста, прочитайте ответ @Force и мой комментарий к нему..... и спасибо за ваши предложения. :) - person Jayesh Tembhekar; 04.01.2012

При настройке уведомления просто установите в поле .when значение Integer.MIN или Integer.MAX, чтобы уведомление было соответственно слева или справа.

Иконки сортируются по этому полю во всех версиях Android, включая ICS.

На JB (4.1) нужно установить приоритет уведомления, чтобы оно попадало слева или справа:

уведомление.priority = PRIORITY_MIN для правой стороны, уведомление. Priority = PRIORITY_MAX для левой стороны

РЕДАКТИРОВАТЬ: На планшетах, если вы используете Notification.FLAG_FOREGROUND_SERVICE или startForeground, значок будет расположен справа, и все, что я пытался переместить влево, не сработало (проверено на ICS).

person 3c71    schedule 28.06.2012