1

Je me suis cassé la tête avec ceci pendant quelques jours ainsi j'espère que quelqu'un peut indiquer ce que je fais mal. Je crée une intention avec 5 extras de chaîne et la définissant à un PendingIntent à utiliser avec AlarmManager. Cependant, lorsque l'alarme se déclenche et que je continue à gérer l'intention dans onHandleIntent de ma classe de service, il n'y a que 3 extras dans l'intention. Certains codes & captures d'écran ci-dessous.Intention manquant seulement quelques extras dans IntentService

création Intention:

Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION"); 
     ; 
     notificationIntent.addCategory("android.intent.category.DEFAULT"); 
     notificationIntent.putExtra("key1", "val5"); 
     notificationIntent.putExtra("key2", "val4"); 
     notificationIntent.putExtra("key3", "val3"); 
     notificationIntent.putExtra("key4", "val4"); 
     notificationIntent.putExtra("key5", "val5"); 
     return notificationIntent; 

En attendant la création Intention:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getActivity(), Integer.parseInt(obj.uniqueId), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Service intention Intérieur:

protected void onHandleIntent(Intent intent) { 

     if(intent != null) { 

      if (intent.getExtras() != null) { 

      String val1 = intent.getStringExtra("key1"); 
      String val2 = intent.getStringExtra("key2"); 
      String val3 = intent.getStringExtra("key3"); 
      String val4 = intent.getStringExtra("key4"); 
      String val5 = intent.getStringExtra("key5"); 

      // proceed with other stuff.. 

     } 
    } 
} 

Sur la base d'une autre réponse de questions similaires à la mienne, je l'ai aussi essayé:

final Intent originalIntent = (Intent)intent.getExtras().get(Intent.EXTRA_INTENT); 
final String val1 = originalIntent.getStringExtra("key1"); 

Mais originalIntent est toujours null. Je n'arrive pas à comprendre pourquoi seulement 3 des extras sont disponibles et les 2 autres ne le sont pas. Ils sont toutes les valeurs de chaîne de sorte que la discrimination est au-delà de ma compréhension :(

screenshots Débogueur: Quand l'intention est créé - enter image description here

Quand l'intention est lu dans la classe de service intention - enter image description here

J'ai aussi essayé de faire intent.setAction("",Math.random()); comme suggéré dans certaines réponses sur SO mais cela a entraîné l'alarme ne se déclenche pas du tout Toute aide est grandement appréciée

+0

Et si vous changez cela en PendingIntent pendingIntent = PendingIntent.getActivity (ceci, Integer.parseInt (obj.uniqueId), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); ' ? –

+0

@ShreeKrishna: faire getActivity entraîne une alarme qui ne se déclenche pas du tout – akdsouza

+0

quelle est la valeur de 'obj.uniqueId'? est-ce vraiment unique ou toujours pareil? – pskink

Répondre

1

Vous avez ajouté vos "extras" à une diffusion Intent et ensuite vous affirmez que dans votre Service seulement 3 des 5 apparaissent. Que diriez-vous de regarder le code qui extrait les "extras" de la diffusion Intent dans onReceive() et les copie au Intent vous utilisez pour appeler startService(). Je pense que vous trouverez votre problème est là :-)