fbpx

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

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

Скачать готовый проект вы можете по ссылке на GitHub. Поехали!

Чтобы создать и показать уведомление пользователю, необходимо выполнить следующие шаги:

  1. Создать так называемый Notification channel.
  2. Зарегистрировать его
  3. Создать Notification
  4. Отправить уведомление, используя NotificationManager.

Создание канала уведомлений

Каналы для уведомлений необходимы для группирования уведомлений похожего типа. Начиная с 26 API для уведомлений обязательно определить канал, в противном случае они не будут показаны на новых версиях операционной системы Android.  Поэтому давайте создадим NotificationHelper.kt – класс для управления уведомления и создадим метод createNotificationChannel()

fun createNotificationChannel(context: Context, importance: Int, showBadge: Boolean, name: String, description: String) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        val channelId = "${context.packageName}-$name"
        val channel = NotificationChannel(channelId, name, importance)
        channel.description = description
        channel.setShowBadge(showBadge)

        // Register the channel with the system
        val notificationManager = context.getSystemService(NotificationManager::class.java)
        notificationManager.createNotificationChannel(channel)
    }
}

Давайте рассмотрим этот метод более подробно:

  1. В начале стоит проверка Build.VERSION.SDK_INT >= Build.VERSION_CODES.O Эта проверка необходима, так как NotificationChannelпоявился только в 26 API операционной системы Android.
  2. Необходимо создать уникальное имя для канала уведомлений. Имя и описание канала впоследствии будет отображаться в настройках уведомлений вашего приложения.
  3. Используя метод createNotificationChannelсоздаём канал уведомлений
  4. Теперь осталось вызвать метод!

Регистрация канала уведомлений

Теперь необходимо зарегистрировать канал уведомлений. Для этого создайте класс-наследник от Application и назовите его FitnessApp. Не забудьте добавить в манифест приложения android:name=".FitnessApp" AndroidManifest.xml  теперь будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.androidschool.fitnessnotification">

    <application
        android:name=".FitnessApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

В метод onCreate() класса FitnessApp добавьте следующий код для регистрации канала:

NotificationHelper.createNotificationChannel(
      this,
      NotificationManagerCompat.IMPORTANCE_DEFAULT, false,
      getString(R.string.app_name), "Канал Фитнес - приложения."
  )

Отлично! Теперь мы сможем отправить уведомление.

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

Откройте  NotificationHelper.kt file и создайте метод createSampleDataNotification()

fun createSampleDataNotification(
    context: Context, title: String, message: String,
    bigText: String, autoCancel: Boolean
) {

    // 1
    val channelId = "${context.packageName}-${context.getString(R.string.app_name)}"
    // 2
    val notificationBuilder = NotificationCompat.Builder(context, channelId).apply {
        setSmallIcon(R.drawable.ic_fitnes) // 3
        setContentTitle(title) // 4
        setContentText(message) // 5
        setAutoCancel(autoCancel) // 6
        setStyle(NotificationCompat.BigTextStyle().bigText(bigText)) // 7
        priority = NotificationCompat.PRIORITY_DEFAULT // 8

        val intent = Intent(context, MainActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
        setContentIntent(pendingIntent)
    }

    val notificationManager = NotificationManagerCompat.from(context)
    notificationManager.notify(1001, notificationBuilder.build())
}

Давайте рассмотрим этот метод более подробно:

  1. Создаём уникальный  channelId для этого приложения, используя  имя package name и приложения.
  2. Для создания уведомления используем NotificationCompat.Builder
  3. Единственным обязательным параметром при создании уведомления является иконка. С помощью метода setSmallIcon задаём иконку для уведомления.
  4. Задаём заголовок для уведомления
  5. Задаём описание
  6. Указываем стиль NotificationCompat.BigTextStyle().
  7. Указываем приоритет уведомления. Существуют следующие типы уведомлений:
  • PRIORITY_MIN
  • PRIORTY_MAX
  • PRIORITY_LOW
  • PRIORTY_HIGH
  • PRIORITY_DEFAULT

 

8. Устанавливаем уведомление как автоматически скрываемое после того, как пользователь нажмёт на уведомление.

После этого мы добавим PendingIntent для открытия приложения.  Что такое PendingIntent и для чего он используется – рассмотрим в следующем уроке.