【问题标题】:AlarmManager PendingIntent.FLAG_NO_CREATE return not null after cancelling alarmAlarmManager PendingIntent.FLAG_NO_CREATE 取消报警后返回非空
【发布时间】:2018-05-28 16:17:28
【问题描述】:

我正在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)
}

【问题讨论】:

    标签: android android-pendingintent android-alarms


    【解决方案1】:

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

    alarmMgr.cancel(alarmIntent)
    

    添加

    alarmIntent.cancel()
    

    【讨论】:

    • 你能解决这个问题吗?我很困惑为什么这个解决方案不适合你,我想了解更多。
    • 它也不适合我。 loAlarmMgrHalf.cancel(loAlarmIntentHalf) loAlarmIntentHalf.cancel()
    • @RaRa 请为您的问题打开一个新问题并包含相关详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多