Уведомления в Android. Notification + PendingIntent на примере | Prologistic.com.ua

Уведомления в Android. Notification + PendingIntent на примере

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

Краткий обзор PendingIntent в Android

Для начала нам нужно понять для чего нужен объект PendingIntent.

И так, PendingIntent является оболочкой для объектов Intent (намерений) и определяет действие, которое должно выполниться в будущем. Как правило, он используется в для запуска уведомлений или в паре с AlarmManager для повторяющихся действий.

Из соображений безопасности, передающийся в PendingIntent объект Intent должен явно задавать имя компонента. Каждый явный Intent в свою очередь должен обрабатываться такими компонентами, как Activity, BroadcastReceiver или Service. Для этого PendingIntent использует следующие методы:

  • PendingIntent.getActivity() — получение PendingIntent для запуска начать Activity.
  • PendingIntent.getBroadcast() — получение PendingIntent для запуска объектов Broadcast.
  • PendingIntent.getService() — получение PendingIntent для запуска службы.

Рассмотрим создание PendingIntent на примере:

Рассмотрим подробнее параметры, которые мы передали в методе getActivity():

  • Первый параметр this — контекст, в котором PendingIntent начинает свою работу.
  • Второй параметр 1 (requestCode) — код запроса, с которым отправляем наш PendingIntent.
  • Третий параметр intent — явное намерение с указанием объекта Activity, который должен быть запущен.
  • Четвертый параметр PendingIntent.FLAG_UPDATE_CURRENT — один из возможных флагов объекта PendingIntent. В примере выше мы использовали FLAG_UPDATE_CURRENT, который обновит значение PendingIntent (если такой уже существует) последним объектом Intent. Также есть такой флаг, как FLAG_CANCEL_CURRENT, который отменяет уже существующий PendingIntent.

Уведомления в Android. Объекты Notification

В Android уже есть класс Toast, который является удобным способом оповестить пользователя с помощью различных уведомлений, но проблема заключается в том, что эти сообщения не являются постоянными и в течении нескольких секунд исчезают. Да, сейчас в Android используется виджет SnackBar для этих целей, однако мы говорим об объектах Notification, которые подразумевают другой способ оповещения пользователя.

С помощью объекта Notification мы можем показать пользователю сообщение вне пользовательского интерфейса нашего приложения и использовать различные способы его вызова.

Создаем Notification в Android. Наиболее используемые методы

Уведомления создается с помощью класса NotificationManager, как показано ниже:

Также предоставляется интерфейс Notification.Builder для создания объекта уведомления:

Теперь давайте рассмотрим наиболее используемые методы при создании уведомлений:

  • Метод build() — компонует все заданные параметры и возвращает новый объект Notification.
  • Метод NotificationCompat.Builder setAutoCancel(boolean autoCancel) — устанавливает поведение уведомления таким образом, чтобы оно автоматически отменялось, когда пользователь нажимает кнопку на панели
  • Метод setContent (RemoteViews views) предоставляет работу с RemoteViews (уведомления на экране блокировки) вместо стандартной панели уведомлений
  • Метод setContentInfo (CharSequence info) устанавливает большой размер текста в правой части уведомления
  • Метод setContentIntent (PendingIntent intent) предоставляет объект PendingIntent для отправки после нажатия пользователем на уведомление.
  • Метод setContentText (CharSequence text) устанавливает текст во второй строке уведомления
  • Метод setContentTitle (CharSequence title) устанавливает текст в первой строке уведомления (установка заголовка уведомления)
  • Метод setDefaults (int defaults) устанавливает параметры оповещений по умолчанию. Например, mBuilder.setDefaults (Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
  • Метод setLargeIcon (Bitmap icon) устанавливает большой значок для уведомления
  • Метод setSmallIcon (int icon) устанавливает маленький значок на панели уведомлений
  • Метод setTicker (CharSequence tickerText) устанавливает текст, который будет отображаться в строке состояния, когда уведомление только появится
  • Метод setVibrate (long[] pattern) устанавливает паттерн вибрации (сколько будет длиться и какие интервалы), когда уведомление только появится
  • Метод setWhen (long when) устанавливает время, когда произошло событие в уведомлении (объекты Notification сортируются по этому времени в панели уведомлений).

Интерфейс Notification.Builder позволяет добавлять до трех кнопок с определёнными действиями на одно уведомление.

Начиная с версии Android API 4.1 и выше Android появилась большие уведомления с расширенным функционалом.

Отменяемые уведомления в Android

Android позволяет нам отменять уведомления с помощью вызова метода cancel() для конкретного уведомления (получаем по id) или вызвать метод NotificationManager.cancelAll() для удаления всех ранее полученных уведомлений.

Создаем уведомление (Notification) в Android

В нашем тестовом приложении мы создадим объект Intent для просмотра конкретной веб-страницы, обернем его в PendingIntent и заставим вызываться по нажатию пользователя. Также добавим функцию отмены уведомления.

Создадим проект в Android и добавим в макет activity_main.xml два виджета Button.Первая кнопка будет отвечать за создание уведомления, а другая за его отмену:

 

Теперь идем в MainActivity, инициализируем кнопки и создаем методы отправки и отмены уведомления:

Как видите, нам не потребовалось никаких дополнительных разрешений в манифесте. Теперь просто запустим приложение и посмотрим результат:

Android Notification ExampleКак видно на картинке выше, мы нажали на кнопку «Создать уведомление», потом оно появилось в панели уведомлений со значком Alert. Потом мы опустили «шторку уведомлений» и увидели скомпонованный объект Notification. После нажатия на уведомление мы перешли на указанный сайт.

Вам осталось лишь отменить уведомление: просто нажмите в приложении кнопку «Отменить» и NotificationManager уберет его по указанному id.

Подписывайтесь на новые статьи по Android и Java!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *