警报管理器PendingIntent.FLAG_NO_CREATE取消警报后返回不为空



我正在用Kotlin编写Android应用程序。在某些情况下,我使用那里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)
}

取消闹钟后,您需要取消PendingIntent。后

alarmMgr.cancel(alarmIntent)

alarmIntent.cancel()

最新更新