AlarmManager PendingIntent.FLAG_NO_CREATE возвращает ненулевое значение после отмены тревоги - PullRequest
0 голосов
/ 28 мая 2018

Я пишу 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)
}

1 Ответ

0 голосов
/ 29 мая 2018

После отмены будильника необходимо отменить PendingIntent.После

alarmMgr.cancel(alarmIntent)

добавить

alarmIntent.cancel()
...