1

我重复使用下面的代码开始我的服务。我的服务每天早上 8 点开始。并且 AlarmManager 每 1 分钟重复一次。我想在下午 6 点停止这项服务。我怎样才能做到这一点 ?

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    PendingIntent loggerIntent = PendingIntent.getBroadcast(this, 0,new Intent(this,AlarmReceiver.class), 0);

    Calendar timeOff9 = Calendar.getInstance();
    timeOff9.set(Calendar.HOUR_OF_DAY, 08);
    timeOff9.set(Calendar.MINUTE, 00);
    timeOff9.set(Calendar.SECOND, 00);
    //--------------------------------------------------------------------------------------------------------------------
    long duration = userinterval * 60 * 1000;
    manager.setRepeating(AlarmManager.RTC_WAKEUP,timeOff9.getTimeInMillis(), duration, loggerIntent);
4

1 回答 1

2

为了准确地在下午 6 点取消,我会考虑 2 个选项:

  1. 每次警报触发(即每 1 分钟),检查时间,如果时间在下午 6 点之后取消。
  2. 在 AlarmManager 中设置一次性警报,以准确在下午 6 点响起。在那个警报中,取消。

为了简单起见,我更喜欢选项 2,以及每个代码块的模块化。所以对我来说,我会在我的概念验证代码中使用 (2),同时研究解决方案。

但从资源的角度来看,选项 1 更好,因为 Android 系统只需要记住一个警报。我会在我的最终生产代码中使用 (1)。

这种工作方式只是我个人的偏好,大多数人可能会说从一开始就使用(1)。

关于取消的详细信息如下...


至于如何取消警报,您通常不会击败@commonsware 的答案......

以下答案复制自如何取消此重复警报?


使用与您使用cancel()AlarmManager等效项调用:PendingIntentsetRepeating()

Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this,
               0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.cancel(sender);

于 2013-05-10T10:10:11.340 回答