这是一篇请求确认(或反驳)我认为在Android中发生警报的情况。这个主题在博客和StackOverflow帖子中频繁发生,但我没有找到这两点的明确解释(见下文)。
以下代码用于设置和警报,然后取消设置。它不起作用。
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN);
PendingIntent sender = PendingIntent.getBroadcast(context, _id, intent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, now.getTime().getTime(), sender);
Intent toCancel = new Intent(context, AlarmReceiver.class);
toCancel.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN);
PendingIntent pendingToCancel = PendingIntent.getBroadcast(context,
_id, toCancel, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(pendingToCancel);
如果不是将PendingIntent.FLAG_ONE_SHOT传递给PendingIntent.getBroadast()的第一次调用,而是传递零,那么它确实有效。我不相信这种行为是有记录的。
如果PendingIntent.getBroadast()(上面的,_id)的第二个参数不相同,则代码也不起作用。我不相信这是记录在案的。在Android文档中,第二个参数记录为“发件人的私有请求代码(当前未使用)。”
问题是我是否已正确描述了这种行为,或者这些概括是否属于虚拟现象。
答案 0 :(得分:3)
您必须将PendingIntent
传递给cancel()
,这相当于您用来注册闹钟的那个。这意味着使用相同的Intent,标志和请求代码。与文档可能引导您相信的内容相反,它实际上也会检查请求代码值。
答案 1 :(得分:0)
您的Android Manifest中定义的闹钟是否有接收器?