重新启用Android警报

重新启用Android警报,android,alarmmanager,android-alarms,repeatingalarm,alarms,Android,Alarmmanager,Android Alarms,Repeatingalarm,Alarms,我有一个警报,可以由用户创建,也可以由用户禁用。 当用户禁用报警时,我只需使用AlarmManager取消报警,并将报警时间存储在某个地方 现在,当用户重新启用报警时,我创建报警并在报警中设置存储的时间。问题是,当我用存储的时间重新创建报警时,会立即调用报警广播的onReceive()方法 我正在按如下方式设置报警: alarmManager.setRepeating(AlarmManager.RTC, time, AlarmManager.INTERVAL_DAY, PendingIn

我有一个警报,可以由用户创建,也可以由用户禁用。 当用户禁用报警时,我只需使用
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>
当用户单击“禁用”时如何禁用报警:

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>
我在清单文件中添加了报警接收器,如下所示:

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方法。我是否也需要注销广播接收器?如果是,那么如果我有两个不同的警报呢?如何仅注销一个警报的广播接收器?

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

发件人:

如果规定的触发时间已过,则会触发报警 立即,报警计数取决于过去的报警距离 触发时间与重复间隔有关

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

尝试将代码更改为:

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));
long now=new Date().getTime();
while(时间<现在){
时间+=AlarmManager.INTERVAL\u天;
}
alarmManager.setRepeating(alarmManager.RTC,时间,
AlarmManager.INTERVAL\u DAY,PendingEvent.getBroadcast(此,
alarmUniqueCode、intentAlarm、PendingEvent.FLAG_UPDATE_CURRENT));
关于你的第二个问题,我真的无法回答。然而,根据我自己的经验,即使我开着听筒,我也没有任何问题