2016-12-23 1 views
1

Je crée une notification en utilisant le code suivant (Kotlin)Remplacer extras intention

val builder = NotificationCompat.Builder(ctx) 
      ........ 
     .setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>() 
      .putExtra("id", member.id) 
      .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0)) 

Ainsi, lorsque la notification est taraudée MainActivity choisira l'utilisateur, à partir de laquelle la notification est arrivé.

override fun onNewIntent(intent: Intent?) { 
    val id = intent?.getStringExtra("id") ?: return 
    selectUser(extra) 
} 

J'envoie 2 notifications de 2 utilisateurs différents. Après avoir cliqué sur la première notification, cela fonctionne correctement (id == _ User1UUID) et sélectionne l'utilisateur. Ensuite, je repasse, envoie une autre notification du deuxième utilisateur, tape dessus et l'intention contient toujours l'identifiant utilisateur précédent et le sélectionne (vérifié par le point d'arrêt). Je sais, c'est parce que FLAG_ACTIVITY_REORDER_TO_FRONT, mais je ne dois conserver qu'une seule instance de MainActivity.

+0

Put 'android: launchMode = "singleTask"' attribut de l'activité dans le fichier AndroidManifest. –

+0

Pour plus d'informations - [link] https://developer.android.com/guide/components/activities/tasks-and-back-stack.html –

+0

@ keyur9779 Je l'ai déjà dans le manifeste, mais ce n'est pas ce drapeau nécessaire aussi? –

Répondre

0

Le problème que vous êtes probablement HAVING est que vous aren 't générer unique PendingIntent s. Si vous aviez 2 notifications pour différents utilisateurs, ils utiliseraient tous les deux le même PendingIntent et vous verriez donc le même id supplémentaire dans les deux.

Pour créer PendingIntent uniques s, changer ceci:

.setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>() 
     .putExtra("id", member.id) 
     .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0)) 

à ceci:

int randomNumber = ... // Use some random number here, or use your "id" if your "id" can be converted to an integer here. 
         // This random number needs to be unique for each Notification you create. 

.setContentIntent(PendingIntent.getActivity(ctx, randomNumber, ctx.newIntent<MainActivity>() 
     .putExtra("id", member.id) 
     .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), u)) 
1

vous avez besoin en fait le code donné à faire de chaque notification unique,

notificationManager.notify((int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE) /* ID of notification */, notificationBuilder.build()); 

si vous avez déjà fait cet essai alors le code ci-dessous

Intent intent = new Intent(this, MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
         PendingIntent.FLAG_ONE_SHOT); 
+0

mes notifications sont uniques, ils ont déjà des identifiants différents –

+0

essayer ma mise à jour –

+0

Je viens de retirer' FLAG_ACTIVITY_REORDER_TO_FRONT' cela fonctionne, mais merci d'essayer aider –