Я пишу Android
приложение в Kotlin
.В некоторых ситуациях я использую AlarmManager
, чтобы планировать задачу каждую 1 минуту, чтобы выполнить какое-либо действие, а в некоторых условиях отменять будущие вызовы.
Перед настройкой будильника я проверяю, было ли оно уже запланировано с помощьюфлаг PendingIntent.FLAG_NO_CREATE
, чтобы я не делал это пару раз.Сначала он работает нормально, и в журнале есть
Should set up repeating alarm: true
Но когда я отменяю свою тревогу, а затем пытаюсь снова запланировать ее, она всегда возвращает false
.Я ожидаю, что после его отмены я снова получу true
, что указывало бы на то, что для этой операции PendingIntent
не было запланированной тревоги.Что-то не так с моим кодом или с тем, как я думаю?:)
Вот мои 2 метода, используемые для установки и отмены будильника.
fun setupAlarm(context: Context) {
val alarmMgr = context.applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context.applicationContext, ScheduledCheckReceiver::class.java)
val existingIntent = PendingIntent.getBroadcast(context.applicationContext, 100, intent, PendingIntent.FLAG_NO_CREATE)
Log.d("AlarmUtil","Should set up repeating alarm: " + (existingIntent == null))
if(existingIntent == null) {
val alarmIntent = PendingIntent.getBroadcast(context.applicationContext, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT)
Log.d("AlarmUtil", "Setting up alarm to " + Date(System.currentTimeMillis() + 30 * 1000))
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 30 * 1000, 60 * 1000, alarmIntent)
}
}
fun cancelAlarm(context: Context) {
Log.d("AlarmUtil", "Cancel alert called")
val alarmMgr = context.applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context.applicationContext, ScheduledCheckReceiver::class.java)
val alarmIntent = PendingIntent.getBroadcast(context.applicationContext, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT)
alarmMgr.cancel(alarmIntent)
}