【问题标题】:Cancel alarm and test if pending intent exist取消警报并测试是否存在未决意图
【发布时间】:2018-04-24 22:27:37
【问题描述】:

当此闹钟存在时我想取消闹钟

fun isAlarmWorking(context: Context): Boolean {
    val intent = PendingIntent.getBroadcast(
        context.applicationContext,
        ALARM_ID,
        createAlarmReceiver(context.applicationContext),
        PendingIntent.FLAG_NO_CREATE)
    return intent != null
}

fun cancelAlarm(context: Context) {
    val intent = PendingIntent.getBroadcast(
        context.applicationContext,
        ALARM_ID,
        createAlarmReceiver(context.applicationContext),
        0)
    val alarmManager = 
        context.applicationContext.systemService<AlarmManager>()
    alarmManager.cancel(intent)
}

看起来不错

  1. 我测试PendingIntent是否与FLAG_NO_CREATE一起存在
  2. 取消与相同ALARM_ID的警报

但是当我在真实设备上测试它时

Timber.d("onClick: ${isAlarmWorking(this)}")
cancelAlarm(this)
Timber.d("onCancel: ${isAlarmWorking(this)}")

我明白了

onClick: false
onCancel: true

为什么在调用cancel 后我得到true

[编辑]我添加后

intent.cancel()

cancelAlarm 结尾的测试结果看起来不错

onClick: false
onCancel: false

所以我知道isAlarmWorking 询问系统中是否有PendingIntent 而不是警报本身,对吗?

【问题讨论】:

    标签: android alarmmanager android-pendingintent


    【解决方案1】:

    是的。 isAlarmWorking 中的代码仅检查是否存在与您指定的 PendingIntent 匹配的 PendingIntent。它不会检查是否有使用该PendingIntent 设置的警报。

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多