Многие популярные приложения в процессе своей работы уведомляют пользователя о тех или иных событиях при помощи механизма так называемых «уведомлений» — кратких сообщений на панели в верхней части экрана.
В этой статье мы рассмотрим основы создания таких уведомлений.
В Android уведомления представлены объектом Notification, который формируется при помощи вспомогательного объекта Notification.Builder. Уведомления передаются в системную панель при помощи объекта NotificationManager.
Рассмотрим пример создания простого уведомления.
Вначале зададим идентификатор уведомления и создадим Intent.
1 2 3 4 5 6 7 |
val NOTIFY_ID: Int = 100; val notificationIntent = Intent(this, MainActivity::class.java) val contentIntent = PendingIntent.getActivity( this, 0, notificationIntent PendingIntent.FLAG_CANCEL_CURRENT ) |
Далее создадим объект Notification.Builder
1 |
val builder = NotificationCompat.Builder(this) |
С его помощью зададим необходимые параметры уведомления:
1 2 3 4 5 6 7 |
builder.setContentIntent(contentIntent) // Значок для уведомления (буде отображаться в системной панели и при развёртывании области уведомлений он же отобразится в его заголовке уведомления) .setSmallIcon(R.drawable.ic_launcher_foreground) // Заголовок уведомления .setContentTitle("Уведомление") // Содержание уведомления .setContentText("Тест") |
Теперь можно получить объект NotificationManager и разместить уведомление в верхней панели.
1 2 |
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.notify(NOTIFY_ID, builder.build()) |
Всё вместе будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
val NOTIFY_ID: Int = 100; val notificationIntent = Intent(this, MainActivity::class.java) val contentIntent = PendingIntent.getActivity( this, 0, notificationIntent PendingIntent.FLAG_CANCEL_CURRENT ) val builder = NotificationCompat.Builder(this) builder.setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle("Уведомление") .setContentText("Тест") val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.notify(NOTIFY_ID, builder.build()) |
Результат работы данного кода можно увидеть на скриншотах ниже.
Значок уведомления в системной панели:
Уведомление в развёрнутом виде.
Уведомление на экране блокировки.
Вышеприведённый способ прекрасно работает на Android 7 и более ранних версиях этой операционной системы.
Начиная с версии 8.0 (API 26) для отправки уведомлений необходимо создавать так называемые «каналы уведомлений».
Зададим id и название будущего канала.
1 2 |
val CHANEL_ID = "MyTestApp" val CHANEL_NAME = "MyTestAppChannel" |
Создадим объект будущего канала с присвоением ему приоритета по умолчанию (подробнее о системе приоритетов каналов уведомлений в отдельной статье).
1 |
val notificationChannel: NotificationChannel = NotificationChannel(CHANEL_ID, CHANEL_NAME, NotificationManager.IMPORTANCE_DEFAULT) |
Зададим описание канала.
1 |
notificationChannel.description = "Test" |
После этого можно непосредственно создавать канал при помощи NotificationManger.
1 |
notificationManager.createNotificationChannel(notificationChannel) |
При создании уведомления нужно будет передать в конструктор объекта Notification.Builder уже два параметра (контекст и id канала).
1 |
val builder = Notification.Builder(this, CHANEL_ID) |
В остальном работа с уведомлениями ничем не отличается от того, что было показано ранее для младших версий Android. Но, на всякий случай приведём полный код (всё вместе).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
val NOTIFY_ID: Int = 100; val CHANEL_ID = "MyTestApp" val CHANEL_NAME = "MyTestAppChannel" val notificationIntent = Intent(this, MainActivity::class.java) val contentIntent = PendingIntent.getActivity( this, 0, notificationIntent PendingIntent.FLAG_CANCEL_CURRENT ) val notificationChannel: NotificationChannel = NotificationChannel(CHANEL_ID, CHANEL_NAME, NotificationManager.IMPORTANCE_DEFAULT) notificationChannel.description = "Test" val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(notificationChannel) val builder = Notification.Builder(this, CHANEL_ID) builder.setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle("Уведомление") .setContentText("Тест") notificationManager.notify(NOTIFY_ID, builder.build()) |
Добавить комментарий