【问题标题】:Re-enabling the Android Alarm重新启用 Android 闹钟
【发布时间】:2014-04-16 05:46:22
【问题描述】:

我有一个可由用户创建并可由用户禁用的警报。 当用户禁用警报时,我只需使用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>

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

【问题讨论】:

    标签: android alarmmanager android-alarms repeatingalarm alarms


    【解决方案1】:

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

    来自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));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多