2012-08-07 74 views
1

我正在制作一个使用AlarmManager.setInexactRepeating()方法的应用程序,该方法将PendingIntent作为参数。活动重新启动后,等待的意图为空

我通过调用我的setAlarm()方法

public void setRepeatingAlarm() { 

    Intent intent = new Intent(this, AlarmReceiver.class); 
    String url = getAssembledUrl(); 
    intent.putExtra("url", url); 
    pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 

} 

启动这个和stopAlarm停止()

private void stopRepeatingAlarm() { 

    alarmManager.cancel(pendingIntent); 
    pendingIntent.cancel(); 

} 

作品就好了。但是,当活动被破坏,并且用户决定停止警报时,显然等待的意图为空,因为它是在当前活动期间未调用的setRepeatingAlarm()方法中创建的。

什么是解决这个问题的正确方法?

我可以在Activity.onCreate()中创建待定的意图,并且可以解决这个问题,但是我将无法再次启动警报,因为挂起的意图被取消并需要重新创建(我想,除非有办法检查的意图被取消了,我不知道)

+0

有人吗? hmmmmm – urSus 2012-08-07 12:56:36

回答

0

其实,事实证明

PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

返回相同的悬而未决的目的,如果目的是相同的,所以,所有的我需要的是

private void stopRepeatingAlarm() { 

    if(pendingIntent == null) { 
     pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    } 

    alarmManager.cancel(pendingIntent); 

}