1

这是一篇要求确认(或反驳)我认为在 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 文档中,第二个参数记录为“发件人的私人请求代码(当前未使用)”。

问题是我是否正确地描述了这种行为,或者这些概括是否是表象。

4

2 回答 2

3

你必须传递一个PendingIntent相当于cancel()你用来注册警报的那个。这意味着使用相同的意图、标志和请求代码。与文档可能让您相信的相反,它实际上也检查了请求代码值。

于 2012-09-25T05:07:03.547 回答
0

您是否有 Android 清单中定义的警报接收器?

于 2012-09-25T05:01:45.650 回答