从服务停止AlarmManager但在Activity中创建

时间:2013-11-12 17:08:28

标签: android service alarmmanager

我按照以下方式创建了一个AlarmManager。在特定时间之后,服务会以stopSelf()停止,但是alarmmanager会再次启动服务。 如何在服务中停止AlarmManager?活动不再运行了,我必须在服务中进行。

使用AlarmManager定期启动服务的活动:

Intent i=new Intent(this, AppService.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

if((tb_runBG.isChecked()))
{    
    alarmManager.cancel(pi);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *update_time, pi);                              
}
else
  {    
    // From Activity it's no problem to stop the AlarmManager   
    alarmManager.cancel(pi);
    stopService(new Intent(this, AppService.class));                     
  }

我尝试停止AlarmManager的服务:

Intent i=new Intent(this, volumeActivity.class);                      
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
// Her I should get the getSystemService from the Activity, but how??
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// Following unfortunately not working ...
alarmManager.cancel(pi);
stopSelf(); 

不幸的是它没有用。 Servive停止,但它由AlarmManager再次调用......

修改

以下也不工作:

AlarmManager alarmManager = (AlarmManager) this.getBaseContext().getSystemService(Context.ALARM_SERVICE); 

AlarmManager alarmManager = (AlarmManager) this.getApplicationContext().getSystemService(Context.ALARM_SERVICE);  

1 个答案:

答案 0 :(得分:5)

我猜想在设置闹钟和取消闹钟的情况下,PendingIntent应该相同。在您的情况下,第二个待处理的意图与第一个未完成的意图不同。您可以在取消代码中尝试以下操作吗?

    PendingIntent pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

编辑:刚刚注意到,你的意图也不一样。这是故意的吗?