AlarmManager 未创建警报

AlarmManager not creating an alarm

我正在尝试向我的应用添加一些 "reminders" 功能。我想设置一个 AlarmManager 并在警报发生时触发一个 Notification

我添加了一些方法来创建警报、取消警报以及查看警报是否处于活动状态。

以下代码在 Settings.class 中,它扩展了 Activity:

private boolean getRemindersEnabled() {
    return (PendingIntent.getBroadcast(this,
            1,
            new Intent(this, Main.class),
            PendingIntent.FLAG_NO_CREATE) != null);
}

private void enableReminders() {
    AlarmManager alarmMgr;
    PendingIntent alarmIntent;

    alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, Main.class);
    alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, mDayStart);
    calendar.set(Calendar.MINUTE, 0);

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            SIXY_MINUTES,
            alarmIntent);

    mRemindersEnabled = getRemindersEnabled();
    populateReminders();
}

private void disableReminders() {
    AlarmManager service = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, Main.class);
    PendingIntent pending = PendingIntent.getBroadcast(this,
            0,
            intent,
            PendingIntent.FLAG_CANCEL_CURRENT);
    service.cancel(pending);

    mRemindersEnabled = getRemindersEnabled();
    populateReminders();
}

当我调用 enableReminders() 时,它会创建警报。但是,getRemindersEnabled() returns 错误。有什么我没能做到的吗?

getRemindersEnabled() 应该使用与创建警报的 PendingIntent 相同的 requestCode。在这种情况下,您使用的是 1,正确的是 0.

private boolean getRemindersEnabled() {
    return (PendingIntent.getBroadcast(this,
            0,
            new Intent(this, Main.class),
            PendingIntent.FLAG_NO_CREATE) != null);
}

[编辑]

要取消警报,请在调用 service.cancel(intent); 之前,使用标记 FLAG_UPDATE_CURRENT

调用 pending.cancel();
PendingIntent pending = PendingIntent.getBroadcast(this,
        0,
        intent,
        PendingIntent. FLAG_UPDATE_CURRENT);
pending.cancel();
service.cancel(pending);