在特定时间停止服务

时间:2013-05-10 09:44:48

标签: android alarmmanager

我正在使用下面的代码反复启动我的服务。我的服务每天早上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);

1 个答案:

答案 0 :(得分:2)

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

  1. 每次警报触发(即每1分钟),检查时间,如果时间是在下午6点后取消。
  2. 在AlarmManager中设置一次性警报,准确地在下午6点关闭。在那个闹钟中,取消。
  3. 我更喜欢选项2,以简化每个代码块的模块化。所以对我来说,我会在我的概念验证代码中使用(2),同时处理解决方案。

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

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

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


    至于如何取消闹钟,你通常不会被@commonsware打败答案....

    How to cancel this repeating alarm?

    复制的答案

    使用与您cancel()使用的AlarmManager相同的PendingIntent来调用setRepeating()上的Intent intent = new Intent(this, AlarmReceive.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(sender);

    {{1}}