Android Создание уведомлений в строке состояния

Создание уведомлений в строке состояния.

Уведомление в строке состояния добавляет значок в строку состояния системы (с дополнительным текстовым сообщением) и развернутое сообщение в "Уведомления" окно. Когда пользователь выбирает развернутое сообщение, Android запускает намерение, определяемое уведомлением (обычно для запуска действия). Вы также можете настроить уведомление, чтобы оно предупреждало пользователя звуком, вибрацией и миганием на устройстве..

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

На снимке экрана ниже показана строка состояния со значком уведомления слева..

На следующем снимке экрана показано развернутое сообщение уведомления в "Уведомления" окно. Пользователь может открыть окно уведомлений, потянув вниз строку состояния (или выбрав «Уведомления» в меню «Домой»)..

Основы.

Действие или служба могут инициировать уведомление в строке состояния. Поскольку Activity может выполнять действия только тогда, когда она активна и находится в фокусе, вы должны создавать уведомления в строке состояния из службы. Таким образом, уведомление может быть создано в фоновом режиме, когда пользователь использует другое приложение или когда устройство спит. Для создания уведомления необходимо использовать два класса: Notification и NotificationManager..

Используйте экземпляр класса Notification, чтобы определить свойства уведомления в строке состояния, такие как значок строки состояния, развернутое сообщение и дополнительные настройки, такие как звук для воспроизведения. NotificationManager — это системная служба Android, которая выполняет все уведомления и управляет ими. Вы не создаете экземпляр NotificationManager. Чтобы отправить ему свое Уведомление, вы должны получить ссылку на NotificationManager с помощью getSystemService (), а затем, когда вы хотите уведомить пользователя, передать ему свой объект уведомления с помощью notify ().

Чтобы создать уведомление в строке состояния:

Получить ссылку на NotificationManager: создать экземпляр уведомления: определить развернутое сообщение уведомления и намерение: передать уведомление в NotificationManager:

Вот и все. Ваш пользователь получил уведомление.

Управление вашими уведомлениями.

NotificationManager — это системная служба, которая управляет всеми уведомлениями. Вы должны получить ссылку на него с помощью метода getSystemService (). Например:

Если вы хотите отправить уведомление в строке состояния, передайте объект Notification в NotificationManager с помощью notify (int, Notification). Первый параметр — это уникальный идентификатор уведомления, а второй — объект уведомления. Идентификатор однозначно идентифицирует уведомление в вашем приложении. Это необходимо, если вам нужно обновить уведомление или (если ваше приложение управляет различными видами уведомлений) выбрать соответствующее действие, когда пользователь возвращается в ваше приложение через намерение, определенное в уведомлении..

Чтобы очистить уведомление в строке состояния, когда пользователь выбирает его из окна Уведомления, добавьте "FLAG_AUTO_CANCEL" к вашему объекту уведомления. Вы также можете очистить его вручную с помощью cancel (int), передав ему идентификатор уведомления, или очистить все свои уведомления с помощью cancelAll ()..

Создание уведомления.

Объект уведомления определяет подробности сообщения уведомления, которое отображается в строке состояния и "Уведомления" окно и любые другие настройки предупреждений, такие как звуки и мигающие огни.

Уведомление в строке состояния требует всего следующего:

Значок для строки состояния Заголовок и развернутое сообщение для расширенного представления (если вы не определяете настраиваемое расширенное представление) PendingIntent, который запускается при выборе уведомления.

Дополнительные настройки для уведомления в строке состояния включают:

Тикер-текстовое сообщение для строки состояния Звуковое оповещение Настройка вибрации Настройка мигающего светодиода.

Стартовый набор для нового уведомления включает конструктор Notification (int, CharSequence, long) и метод setLatestEventInfo (Context, CharSequence, CharSequence, PendingIntent). Они определяют все необходимые настройки для уведомления. Следующий фрагмент демонстрирует базовую настройку уведомлений:

Обновление уведомления.

Вы можете обновлять информацию в уведомлении строки состояния по мере того, как события продолжают происходить в вашем приложении. Например, когда новое текстовое SMS-сообщение приходит до того, как предыдущие сообщения были прочитаны, приложение обмена сообщениями обновляет существующее уведомление, чтобы отобразить общее количество полученных новых сообщений. Такая практика обновления существующего уведомления намного лучше, чем добавление новых уведомлений в NotificationManager, поскольку позволяет избежать беспорядка в окне уведомлений..

Поскольку каждое уведомление однозначно идентифицируется NotificationManager с помощью целочисленного идентификатора, вы можете изменить уведомление, вызвав setLatestEventInfo () с новыми значениями, изменив некоторые значения полей уведомления, а затем снова вызвать notify ().

Вы можете изменить каждое свойство с помощью полей-членов объекта (за исключением контекста, а также расширенного заголовка и текста сообщения). Вы всегда должны пересматривать текстовое сообщение при обновлении уведомления, вызывая setLatestEventInfo () с новыми значениями для contentTitle и contentText. Затем вызовите notify (), чтобы обновить уведомление. (Конечно, если вы создали настраиваемое расширенное представление, обновление этих значений заголовка и текста не имеет никакого эффекта.)

Добавление звука.

Вы можете предупредить пользователя звуком уведомления по умолчанию (который определяется пользователем) или звуком, указанным вашим приложением..

Чтобы использовать звук пользователя по умолчанию, добавьте "DEFAULT_SOUND" в поле по умолчанию:

Чтобы использовать другой звук в уведомлениях, передайте ссылку Uri на звуковое поле. В следующем примере используется известный аудиофайл, сохраненный на SD-карту устройства:

В следующем примере аудиофайл выбирается из ContentProvider внутреннего хранилища MediaStore:

В этом случае точный идентификатор медиафайла ("6") известен и добавляется к Uri содержимого. Если вы не знаете точный идентификатор, вы должны запросить все носители, доступные в MediaStore, с помощью ContentResolver. См. Документацию поставщиков контента для получения дополнительной информации об использовании ContentResolver..

Если вы хотите, чтобы звук непрерывно повторялся до тех пор, пока пользователь не ответит на уведомление или уведомление не будет отменено, добавьте "FLAG_INSISTENT" к полю флагов.

Примечание. Если в поле значений по умолчанию указано "DEFAULT_SOUND", тогда звук по умолчанию отменяет любой звук, определенный звуковым полем.

Добавление вибрации.

Вы можете предупредить пользователя с помощью шаблона вибрации по умолчанию или шаблона вибрации, определенного вашим приложением..

Чтобы использовать шаблон по умолчанию, добавьте "DEFAULT_VIBRATE" в поле по умолчанию:

Чтобы определить свой собственный образец вибрации, передайте массив длинных значений в поле вибрации:

Длинный массив определяет чередующийся образец продолжительности включения и выключения вибрации (в миллисекундах). Первое значение — это время ожидания (выключения) перед началом, второе значение — это продолжительность первой вибрации, третье — это следующая длительность выключения и т. Д. Шаблон может быть сколь угодно длинным, но его нельзя настроить на повторение..

Примечание. Если в поле значений по умолчанию указано "DEFAULT_VIBRATE", тогда вибрация по умолчанию отменяет любую вибрацию, определенную полем вибрации.

Добавление мигающих огней.

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

Чтобы использовать настройку освещения по умолчанию, добавьте "DEFAULT_LIGHTS" в поле по умолчанию:

Чтобы определить свой собственный цвет и узор, определите значение для поля ledARGB (для цвета), поля ledOffMS (время в миллисекундах, в течение которого свет не горит), ledOnMS (время в миллисекундах до держите свет включенным), а также добавьте "FLAG_SHOW_LIGHTS" в поле флагов:

В этом примере зеленый световой индикатор несколько раз мигает в течение 300 миллисекунд и гаснет на одну секунду. Не все цвета в спектре поддерживаются светодиодами устройств, и не все устройства поддерживают одни и те же цвета, поэтому аппаратные средства оценивают в меру своих возможностей. Зеленый — самый распространенный цвет уведомлений.

Больше возможностей.

Вы можете добавить к своим уведомлениям еще несколько функций, используя поля и флаги уведомлений. Некоторые полезные функции включают следующее:

"FLAG_AUTO_CANCEL" flag Добавьте это в поле флагов, чтобы автоматически отменить уведомление после его выбора в окне Уведомления. "FLAG_INSISTENT" flag Добавьте это в поле флагов, чтобы повторять звук, пока пользователь не ответит. "FLAG_ONGOING_EVENT" flag Добавьте это в поле флагов, чтобы сгруппировать уведомление под "Непрерывный" заголовок в окне уведомлений. Это указывает на то, что приложение работает — его процессы все еще работают в фоновом режиме, даже когда приложение не отображается (например, с музыкой или телефонным звонком).. "FLAG_NO_CLEAR" flag Добавьте это в поле флагов, чтобы указать, что уведомление не должно сбрасываться "Очистить уведомления" кнопка. Это особенно полезно, если ваше уведомление продолжается. числовое поле Это значение указывает текущее количество событий, представленных уведомлением. Соответствующий номер отображается поверх значка строки состояния. Если вы собираетесь использовать это поле, вы должны начать с "1" при первом создании Уведомления. (Если вы измените значение с нуля на большее во время обновления, число не отображается.) Поле iconLevel Это значение указывает текущий уровень LevelListDrawable, который используется для значка уведомления. Вы можете анимировать значок в строке состояния, изменив это значение, чтобы оно коррелировало с объектами рисования, определенными в LevelListDrawable. См. Справку по LevelListDrawable для получения дополнительной информации..

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

Создание настраиваемого расширенного просмотра.

По умолчанию расширенный вид, используемый в "Уведомления" Окно включает основной заголовок и текстовое сообщение. Они определяются параметрами contentTitle и contentText метода setLatestEventInfo (). Однако вы также можете определить собственный макет для расширенного представления с помощью RemoteViews. На снимке экрана справа показан пример настраиваемого расширенного представления, в котором используются ImageView и TextView в LinearLayout..

Чтобы определить свой собственный макет для расширенного сообщения, создайте экземпляр объекта RemoteViews и передайте его в поле contentView вашего Уведомления. Передайте PendingIntent полю contentIntent.

Создание настраиваемого расширенного представления лучше всего понять на примере:

Создайте макет XML для расширенного представления. Например, создайте файл макета с именем custom_notification_layout.xml и соберите его так:

Этот макет используется для расширенного представления, но содержимое ImageView и TextView по-прежнему должно быть определено приложением. RemoteViews предлагает несколько удобных методов, которые позволяют вам определять этот контент..

В коде приложения используйте методы RemoveViews для определения изображения и текста. Затем передайте объект RemoteViews в поле contentView уведомления, как показано в этом примере:

Как показано здесь, передайте имя пакета приложения и идентификатор ресурса макета конструктору RemoteViews. Затем определите содержимое для ImageView и TextView, используя setImageViewResource () и setTextViewText (). В каждом случае передайте ссылочный идентификатор соответствующего объекта View, который вы хотите установить, вместе со значением для этого View. Наконец, объект RemoteViews передается в уведомление в поле contentView..

Поскольку вам не нужен метод setLatestEventInfo () при использовании настраиваемого представления, вы должны определить намерение для уведомления с помощью поля contentIntent, как в этом примере: Теперь уведомление можно отправлять как обычно:

Класс RemoteViews также включает методы, которые можно использовать для простого добавления Chronometer или ProgressBar в расширенное представление вашего уведомления. Дополнительные сведения о создании настраиваемых макетов с помощью RemoteViews см. В справке по классу RemoteViews..

Примечание. При создании настраиваемого расширенного представления необходимо уделять особое внимание тому, чтобы настраиваемый макет работал правильно при различных ориентациях и разрешениях устройств. Хотя этот совет применим ко всем макетам просмотра, созданным на Android, он особенно важен в этом случае, потому что пространство вашего макета очень ограничено. Так что не делайте свой собственный макет слишком сложным и обязательно протестируйте его в различных конфигурациях..

Похожие статьи