23

J'ai un problème avec alarmManager et l'intention en attente avec des extras qui iront avec elle.Comment puis-je transmettre correctement des extras uniques à une intention en attente?

Si je règle plusieurs alarmes, elles s'éteindront, mais les extras resteront les mêmes.

Je l'ai déjà lu dans ces questions:

et j'ai essayé:

  • attribuer un identifiant unique à chaque intention en attente et
  • en utilisant tous les drapeaux d'intention en attente,

tous en vain. Je n'ai aucune idée pourquoi ça ne marchera pas.

Voici un extrait de code:

Intent intent = new Intent(con, 
        AppointmentNotificationReciever.class); 
      intent.putExtra("foo", bar.toString()); 


      int id = randomNum; 

      PendingIntent sender = PendingIntent.getBroadcast(con, id, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 


      AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender); 

Répondre

66

peut-être deux questions différentes :

1) Si vous avez déjà créé votre PendingIntent avant et qu'il "correspond" à un PendingIntent existant, vous devez spécifier l'indicateur PendingIntent.FLAG_UPDATE_CURRENT sinon il ne transmettra pas les extras. Une "correspondance" est basée sur les critères qu'Intent.filterEquals() utilise, alors lisez les documents et assurez-vous de bien comprendre les données, l'action, le type, etc.

2) J'ai lu que si vous Ne définissez PAS une action sur votre intention, alors il ne propagera pas les extras, alors essayez peut-être l'intention.setAction ("com.blah.Action").

+0

Dans mon intention en attente j'essaie de définir le PendingIntent.FLAG_UPDATE_CURRENT, mais maintenant quand l'intention est appelée, j'obtiens une erreur comme "java.lang.IllegalArgumentException: Impossible d'utiliser FLAG_RECEIVER_BOOT_UPGRADE ici" - aucune idée cependant où cette BOOT le drapeau vient, tout ce que j'ai ajouté est le FLAG_UPDATE_CURRENT. Avez-vous déjà eu un problème similaire? (Je suis sur Huawei Ideos, 2.2) –

+3

Mise en place d'une action en effet résolu mon problème, merci! – shawkinaw

+0

setaction était bon pour moi .. même problème – catalin87

2

Cela pourrait être dû à l'activité :: getIntent retour intention initiale de l'activité étant donné certains drapeaux intention/filtres. Si cela est le cas pour vous, vous devrez regarder Activity::onNewIntent. Remplacer cette méthode, et l'intention est passé à cette fonction devrait être la nouvelle intention avec extras appropriés, etc.

Le crédit va à cette question SO qui m'a aidé à résoudre mon problème: Why is my searchable activity's Intent.getAction() null?

11

J'ai rencontré un problème similaire. L'utilisation de PendingIntent.FLAG_ONE_SHOT peut résoudre le problème, car cela signifie que PendingActivity ne sera pas réutilisé.