1

我有一个可以由用户创建并且可以由用户禁用的警报。当用户禁用警报时,我只需使用取消警报AlarmManager并将警报时间存储在某处。

现在,当用户重新启用闹钟时,我会创建闹钟并将存储的时间设置为闹钟。问题是当我使用存储的时间重新创建警报时,onReceive()警报广播的方法会立即被调用。

我将警报设置如下:

alarmManager.setRepeating(AlarmManager.RTC, time, AlarmManager.INTERVAL_DAY,
    PendingIntent.getBroadcast(
        this, alarmUniqueCode, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));

当用户单击禁用时如何禁用警报:

sender = PendingIntent.getBroadcast(this, 1, intent, 0);
alarmManager.cancel(sender);

我在清单文件中添加了警报接收器,如下所示:

<receiver
    android:name="com.sign.android.myscheduler.app.AlarmReceiver"
    android:enabled="true"
    android:exported="true" >
</receiver>

还有一个问题:当我禁用警报时,我调用了取消方法。我是否也需要注销广播接收器?如果是,那么如果我有两个不同的警报怎么办?如何只为一个警报取消注册广播接收器?

4

1 回答 1

0

对于您的问题,如果您将时间设置为过去,将立即触发警报

来自AlarmManager API 文档

如果规定的触发时间是过去的,则将立即触发警报,警报计数取决于触发时间相对于重复间隔过去多长时间。

在这种情况下,您必须首先检查存储的时间是否是过去的时间。如果是,那么您必须添加间隔,直到未来的时间。

尝试将代码更改为:

long now = new Date().getTime();
while (time < now) {
    time += AlarmManager.INTERVAL_DAY;
}
alarmManager.setRepeating(AlarmManager.RTC, time,
    AlarmManager.INTERVAL_DAY, PendingIntent.getBroadcast(this,
    alarmUniqueCode, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));

关于你的第二个问题,我真的无法回答。但是,根据我的经验,即使我打开接收器,我也没有任何问题。

于 2014-04-16T06:25:53.700 回答