fbpx

Cоздание PendingIntent и добавление его к AlarmManager.

Cоздание PendingIntent и добавление его к AlarmManager.

Откройте  AlarmScheduler.kt  в папке ru.androidschool.fitnessnotification.notification  и определите внутри метод createPendingIntent(): 

private fun createPendingIntent(context: Context, reminderData: ReminderData, day: String?): PendingIntent? {
    // 1 create the intent using a unique type
    val intent = Intent(context.applicationContext, AlarmReceiver::class.java).apply {
        // 2
        type = "$day-${reminderData.name}-${reminderData.type.name}"
        // 3
        putExtra(KEY_ID, reminderData.id)
    }

    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}

Рассмотрим подробнее этот метод:

  1. Создаём Intent и указываем AlarmReceiver::class.java в качетсве назначения
  2. Установим тип – тип должен быть уникальным – и состоит из названия напоминания и типа тренировки. Если тип не будет уникальным то такой интент заменит другой  PendingIntent с таким же типом. Более подробно как сравниваются интенты можно почитать в документации.
  3. Добавляем ID объекта ReminderData в дополнительные параметры Intent чтобы потом использовать в  AlarmReceiver для получения данных о времени и дате тренировки.
  4. Создаём  PendingIntent используя метод getBroadcast() .  Это очень важно, так как мы создаём  Intent с BroadcastReceiver в качестве приёмника такого интента .