2012-08-07 1 views
1

Je fais une application qui utilise la méthode AlarmManager.setInexactRepeating(), qui prend un PendingIntent comme paramètre.L'intention en attente est nulle après le redémarrage de l'activité

Je commence en appelant ma méthode 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); 

} 

et l'arrêter par stopAlarm()

private void stopRepeatingAlarm() { 

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

} 

fonctionne très bien. Cependant, lorsque l'activité est détruite et que l'utilisateur décide d'arrêter l'alarme, l'intention en attente est évidemment nulle, car elle est créée dans la méthode setRepeatingAlarm() qui n'a pas été appelée pendant la vie des activités en cours.

Quelle est la bonne façon de contourner ce problème?

Je pourrais créer l'intention en attente dans Activity.onCreate() et cela résoudrait ce problème, mais je ne serais pas en mesure de redémarrer l'alarme car l'intention en attente a été annulée et doit être recréée (je pense , à moins d'un moyen de vérifier l'intention a été annulée que je ne sais pas à propos)

+0

Quelqu'un? hmmmmm – urSus

Répondre

0

en fait, il se trouve

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

retourne la même intention en attendant, si l'intention est la même façon, tous les j'avais besoin était

private void stopRepeatingAlarm() { 

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

    alarmManager.cancel(pendingIntent); 

} 
Questions connexes