如何使用AlarmManager停止服务

时间:2017-11-29 05:24:44

标签: android android-service alarmmanager

我有一个警报管理器,每分钟都会重复运行一个服务。我想用一个按钮停止闹钟管理器。

当我在应用程序内部时,警报管理器会停止,但是当它从应用程序中出来并且我想再次停止时钟时,它不会停止,因为内存中没有待处理的意图。使用新的待处理意图,即使我使用相同的ID,先前的待处理意图也不会停止。

btnStart.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    Intent intent = new Intent(G.context, MyService.class);
    intent.setAction("1020");
     pendingIntent = PendingIntent.getService(G.context, 1020, intent, 0);
    G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 2000, pendingIntent);

  }
});//for start button  alarm manager

btnStop.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Intent intent = new Intent(G.context, MyService.class);
    intent.setAction("1020");
    PendingIntent alarmIntent = PendingIntent.getBroadcast(G.context,  1020, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmIntent.cancel();
    G.alarmManager.cancel(alarmIntent);

  }
});//for stop button alarm manager

1 个答案:

答案 0 :(得分:0)

您可以将pendingIntent设为全局,并使用与

中相同的set/stop
Intent intent = new Intent(G.context, MyService.class);
intent.setAction("1020");
pendingIntent = PendingIntent.getService(G.context, 1020, intent, 0);

btnStart.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 2000, pendingIntent);

  }
});

btnStop.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    pendingIntent.cancel();
    G.alarmManager.cancel(pendingIntent);

  }
});