【问题标题】:How to stop service using AlarmManager如何使用 AlarmManager 停止服务
【发布时间】:2017-11-29 05:24:44
【问题描述】:

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

当我在应用程序中时,闹钟管理器会停止,但当它从应用程序中出来并且我想再次停止时钟时,它不会停止,因为内存中没有待处理的意图。使用新的待处理意图,即使我使用相同的 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

【问题讨论】:

    标签: android android-service alarmmanager


    【解决方案1】:

    您可以将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);
    
      }
    });
    

    【讨论】:

    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 2023-03-11
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2011-09-17
    相关资源
    最近更新 更多