使用3个警报启动和停止服务

时间:2013-05-17 12:25:11

标签: android

我希望我的应用程序每天早上9点开始。为此,我使用每天早上9点开始的setRepeatingAlarm()启动Alarm_1。

manager.setRepeating(AlarmManager.RTC_WAKEUP,
    timeOn.getTimeInMillis(), 86400000,startingIntent);

从alarm_1开始,我开始另一个警报,MainAlarm,以1分钟的间隔重复启动我的服务。

manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime(), duration, MainActivity.mainIntent);

我希望我的应用程序每天晚上9点停止。

为此,我每天晚上9点使用setRepeatingAlarm() cancel() MainAlarm启动Alarm_2。

但这不符合预期。

该怎么办?有没有问题,因为我使用3个警报?

警报第二天不起作用。

     This is my cancel() code:
          public class AlarmReceiver2 extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
         AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         manager.cancel(MainActivity.mainIntent);
      MainActivity.mainIntent.cancel();
          }
        }   

1 个答案:

答案 0 :(得分:0)

首先,我认为有3个警报没有问题。

其次,也许您可​​以添加用于尝试和取消的代码。这里的一个技巧是你需要PendingIntent与你用来启动闹钟的cancel()相同 - 这就是为什么看到取消代码会很有用。


请在相关问题上查看我的答案:


这个问题很相似,我觉得我不应该复制整个答案,但这里有一个链接到@commonsware答案的摘要:


How to cancel this repeating alarm?

复制的答案

使用与setRepeating()使用的PendingIntent等效的PendingIntent在AlarmManager上调用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}}