取消警报并测试是否存在待处理意图

时间:2018-04-18 08:45:07

标签: android alarmmanager android-pendingintent

我想在此警报存在时取消警报

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
  2. 是否存在FLAG_NO_CREATE
  3. 使用相同的ALARM_ID
  4. 取消闹钟

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

    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但是没有报警本身,我是对的吗?

1 个答案:

答案 0 :(得分:0)

是。 isAlarmWorking中的代码只会检查是否存在与您指定的PendingIntent匹配的PendingIntent。它不会检查是否设置了PendingIntent的警报。