Course Content
-
Разработка приложения Фитнес-календарь
- Описание проекта
- Разработка графического интерфейса для отображения списка запланированных тренировок
- Создание уведомления Notification
- Создание PendingIntent
- Разработка интерфейса для создания напоминания о тренировке
- Создание локальной БД для хранения информации о тренировках
- Создание BroadcastReceiver
- Создание каналов уведомлений
- Доработка методов для отображения уведомлений
- Описание Alarm Manager
- Реализация механизма напоминания через AlarmManager
- Cоздание PendingIntent и добавление его к AlarmManager.
- Выводы
Создание уведомления Notification
Создания уведомления
Скачать готовый проект вы можете по ссылке на GitHub. Поехали!
Чтобы создать и показать уведомление пользователю, необходимо выполнить следующие шаги:
- Создать так называемый Notification channel.
- Зарегистрировать его
- Создать Notification
- Отправить уведомление, используя 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)
}
}
Давайте рассмотрим этот метод более подробно:
- В начале стоит проверка
Build.VERSION.SDK_INT >= Build.VERSION_CODES.OЭта проверка необходима, так какNotificationChannelпоявился только в 26 API операционной системы Android. - Необходимо создать уникальное имя для канала уведомлений. Имя и описание канала впоследствии будет отображаться в настройках уведомлений вашего приложения.
- Используя метод
createNotificationChannelсоздаём канал уведомлений - Теперь осталось вызвать метод!
Регистрация канала уведомлений
Теперь необходимо зарегистрировать канал уведомлений. Для этого создайте класс-наследник от 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())
}
Давайте рассмотрим этот метод более подробно:
- Создаём уникальный
channelIdдля этого приложения, используя имя package name и приложения. - Для создания уведомления используем
NotificationCompat.Builder - Единственным обязательным параметром при создании уведомления является иконка. С помощью метода
setSmallIconзадаём иконку для уведомления. - Задаём заголовок для уведомления
- Задаём описание
- Указываем стиль
NotificationCompat.BigTextStyle(). - Указываем приоритет уведомления. Существуют следующие типы уведомлений:
- PRIORITY_MIN
- PRIORTY_MAX
- PRIORITY_LOW
- PRIORTY_HIGH
- PRIORITY_DEFAULT
8. Устанавливаем уведомление как автоматически скрываемое после того, как пользователь нажмёт на уведомление.
После этого мы добавим PendingIntent для открытия приложения. Что такое PendingIntent и для чего он используется – рассмотрим в следующем уроке.