我有一个可以由用户创建的警报,并且可以被用户禁用。
当用户禁用警报时,我只需使用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>
还有一个问题:当我禁用闹钟时,我会调用cancel方法。我是否还需要取消注册广播接收器?如果是,那么如果我有两个不同的警报呢?如何仅针对一个警报取消注册广播接收器?
答案 0 :(得分:0)
对于您的问题,如果您在过去设置时间,将立即触发警报
来自AlarmManager API documentation:
如果声明的触发时间是过去的,则会触发警报 立即,报警数量取决于过去的距离 触发时间相对于重复间隔。
在这种情况下,您必须先检查存储的时间是否过去。如果是,则必须添加间隔,直到将来为止。
尝试将代码更改为:
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));
关于你的第二个问题,我无法回答。然而,根据我的自我经验,即使我离开接收器,我也没有任何问题。