如何取消Android中使用setAlarmClock()方法设置的闹钟
取消setAlarmClock()设置闹钟的方法
取消该类型闹钟只需要构造和设置闹钟时完全相同配置的PendingIntent,调用AlarmManager的cancel()方法即可,代码示例如下:
// 构造和设置闹钟时完全一致的Intent和PendingIntent val cancelIntent = Intent(applicationContext, AlarmReceiver::class.java) // requestCode、flag参数必须和你设置闹钟时传入的参数完全相同 val cancelPi = PendingIntent.getBroadcast(applicationContext, 0, cancelIntent, 0) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager // 传入相同的PendingIntent即可取消对应的闹钟 alarmManager.cancel(cancelPi)
注意事项
- 系统通过PendingIntent的匹配规则定位要取消的闹钟,必须保证构造PendingIntent时的
requestCode、Intent的组件/Action/Category等参数、PendingIntent的flag都和设置闹钟时的参数完全一致,否则无法匹配到目标闹钟 - Android 12(API 31)及以上系统强制要求PendingIntent必须明确指定
FLAG_IMMUTABLE(不可修改PendingIntent内容,绝大多数场景用这个即可)或者FLAG_MUTABLE(需要动态修改Intent内容时使用),不能传入0作为flag,设置和取消时使用的flag要保持一致 - 如果你设置了多个不同requestCode的闹钟,取消时需要对应每个闹钟的requestCode分别构造PendingIntent调用cancel
- 调用
cancel()成功后,setAlarmClock()触发的系统状态栏闹钟标识会自动移除,不需要额外调用其他接口处理
内容的提问来源于stack exchange,提问作者quer
相关产品推荐
相关产品推荐

