Comment afficher plusieurs notifications dans Android

Je ne reçois qu’une seule notification et s’il y a une autre notification, elle remplace la précédente et voici mon code

private static void generateNotification(Context context, Ssortingng message, Ssortingng key) { int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, message, when); Ssortingng title = context.getSsortingng(R.ssortingng.app_name); Intent notificationIntent = new Intent(context, FragmentOpenActivity.class); notificationIntent.putExtra(key, key); // set intent so it does not start a new activity notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.defaults |= Notification.DEFAULT_SOUND; // notification.sound = Uri.parse("android.resource://" + // context.getPackageName() + "your_sound_file_name.mp3"); notification.defaults |= Notification.DEFAULT_VIBRATE; notificationManager.notify(0, notification); } 

il suffit de remplacer votre ligne avec cette

  notificationManager.notify(Unique_Integer_Number, notification); 

J’espère que cela vous aidera.

Simple notification_id doit être modifiable.

Créez simplement un nombre aléatoire pour notification_id.

  Random random = new Random(); int m = random.nextInt(9999 - 1000) + 1000; 

ou vous pouvez utiliser cette méthode pour créer un nombre aléatoire comme indiqué par tieorange (cela ne se répètera jamais):

  int m = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE); 

et remplacez cette ligne pour append un paramètre pour l’ID de notification afin de générer un nombre aléatoire

  notificationManager.notify(m, notification); 

Utiliser les préférences partagées a fonctionné pour moi

 SharedPreferences prefs = getSharedPreferences(Activity.class.getSimpleName(), Context.MODE_PRIVATE); int notificationNumber = prefs.getInt("notificationNumber", 0); ... notificationManager.notify(notificationNumber , notification); SharedPreferences.Editor editor = prefs.edit(); notificationNumber++; editor.putInt("notificationNumber", notificationNumber); editor.commit(); 

Je suppose que cela aidera quelqu’un ..
dans le code ci-dessous “not_nu” est un int aléatoire. PendingIntent et Notification ont le même identifiant .. ainsi, à chaque clic de notification, l’intention ira à une activité différente.

 private void sendNotification(Ssortingng message,Ssortingng title,JSONObject extras) throws JSONException { Ssortingng id = extras.getSsortingng("actionParam"); Log.e("gcm","id = "+id); Intent intent = new Intent(this, OrderDetailActivty.class); intent.putExtra("id", id); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); final int not_nu=generateRandom(); PendingIntent pendingIntent = PendingIntent.getActivity(this, not_nu /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_cart_red) .setContentTitle(title) .setContentText(message) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(not_nu /* ID of notification */, notificationBuilder.build()); } public int generateRandom(){ Random random = new Random(); return random.nextInt(9999 - 1000) + 1000; } 

A la place de uniqueIntNo mettez un nombre entier unique comme ceci:

 mNotificationManager.notify(uniqueIntNo, builder.build()); 

Remplacez votre ligne par ceci.

 notificationManager.notify((int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE), notification); 

Vous devez append un identifiant unique à chacune des notifications afin qu’elles ne se combinent pas. Vous pouvez utiliser ce lien pour votre référence:

https://github.com/sanathe06/AndroidGuide/tree/master/ExampleCompatNotificationBuilder

J’ai résolu mon problème comme ça …

 /** * Issues a notification to inform the user that server has sent a message. */ private static void generateNotification(Context context, Ssortingng message, Ssortingng keys, Ssortingng msgId, Ssortingng branchId) { int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); NotificationCompat.Builder nBuilder; Uri alarmSound = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); nBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Smart Share - " + keys) .setLights(Color.BLUE, 500, 500).setContentText(message) .setAutoCancel(true).setTicker("Notification from smartshare") .setVibrate(new long[] { 100, 250, 100, 250, 100, 250 }) .setSound(alarmSound); Ssortingng consumerid = null; Integer position = null; Intent resultIntent = null; if (consumerid != null) { if (msgId != null && !msgId.equalsIgnoreCase("")) { if (key != null && key.equalsIgnoreCase("Yo! Matter")) { ViewYoDataBase db_yo = new ViewYoDataBase(context); position = db_yo.getPosition(msgId); if (position != null) { resultIntent = new Intent(context, YoDetailActivity.class); resultIntent.putExtra("id", Integer.parseInt(msgId)); resultIntent.putExtra("position", position); resultIntent.putExtra("notRefresh", "notRefresh"); } else { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); } } else if (key != null && key.equalsIgnoreCase("Message")) { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); }. . . . . . } else { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); } } else { resultIntent = new Intent(context, MainLoginSignUpActivity.class); } PendingIntent resultPendingIntent = PendingIntent.getActivity(context, notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); if (notify_no < 9) { notify_no = notify_no + 1; } else { notify_no = 0; } nBuilder.setContentIntent(resultPendingIntent); NotificationManager nNotifyMgr = (NotificationManager) context .getSystemService(context.NOTIFICATION_SERVICE); nNotifyMgr.notify(notify_no + 2, nBuilder.build()); } 

Une autre façon de le faire est de prendre la date actuelle pour la convertir en longue juste prendre les 4 derniers chiffres. Il est fort probable que le nombre sera unique.

  long time = new Date().getTime(); Ssortingng tmpStr = Ssortingng.valueOf(time); Ssortingng last4Str = tmpStr.subssortingng(tmpStr.length() -5); int notificationId = Integer.valueOf(last4Str); 

Vous trouverez ci-dessous le code de l’identifiant unique de la transmission:

 //"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences. Ssortingng notificationId = CommonUtilities.getValueFromPreference(context, Global.NOTIFICATION_ID, "0"); int notificationIdinInt = Integer.parseInt(notificationId); notificationManager.notify(notificationIdinInt, notification); // will increment notification id for uniqueness notificationIdinInt = notificationIdinInt + 1; CommonUtilities.saveValueToPreference(context, Global.NOTIFICATION_ID, notificationIdinInt + ""); //Above "CommonUtilities.saveValueToPreference" is the method created by me to save new value in savePreferences. 

Réinitialiser notificationId dans savedPreferences à une plage spécifique, comme je l’ai fait à 1000. Il ne créera donc aucun problème à l’avenir. Faites-moi savoir si vous avez besoin de plus d’informations détaillées ou de toute requête. 🙂

Le problème est avec votre notificationId . Pensez-le comme un index de tableau. Chaque fois que vous mettez à jour votre notification, l’ notificationId est l’endroit où il faut stocker la valeur. Comme vous n’incrémentez pas votre valeur int (dans ce cas, votre notificationId ), celle-ci remplace toujours la précédente. La meilleure solution est de l’incrémenter juste après la mise à jour d’une notification. Et si vous souhaitez le conserver persistant, vous pouvez stocker la valeur de votre notificationId dans sharedPreferences . Chaque fois que vous revenez, vous pouvez simplement saisir la dernière valeur entière ( notificationId stockée dans sharedPreferences ) et l’utiliser.

Utilisez la méthode suivante dans votre code.

Appel de méthode: –

 notificationManager.notify(getCurrentNotificationId(getApplicationContext()), notification); 

Méthode:-

  *Returns a unique notification id. */ public static int getCurrentNotificationId(Context iContext){ NOTIFICATION_ID_UPPER_LIMIT = 30000; // Arbitrary number. NOTIFICATION_ID_LOWER_LIMIT = 0; SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(iContext); int previousTokenId = sharedPreferences.getInt("currentNotificationTokenId", 0); int currentTokenId = previousTokenId+1; SharedPreferences.Editor editor = sharedPreferences.edit(); if(currentTokenId 

Un simple compteur peut résoudre votre problème.

 private Integer notificationId = 0; private Integer incrementNotificationId() { return notificationId++; } NotificationManager.notify(incrementNotificationId, notification); 
 declare class member static int i = 0; mNotificationManager.notify(++i, mBuilder.build());