如何在android中显示多个通知

我只收到一个通知,如果有另一个通知来,它将取代以前的一个,这里是我的代码

private static void generateNotification(Context context, String message, String 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); String title = context.getString(R.string.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); } 

用这个replace你的线

  notificationManager.notify(Unique_Integer_Number, notification); 

希望它会帮助你。

简单的notification_id需要变化。

只需为notification_id创build随机数字。

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

或者你可以使用这个方法创build随机数字(这将永远不会重复):

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

并将此行replace为通知ID参数,以生成随机数

  notificationManager.notify(m, notification); 

使用共享偏好为我工作

 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(); 

我想这会帮助别人..
在下面的代码“not_nu”是一个随机的int .. PendingIntent和通知有相同的ID ..所以在每个通知点击意图将直接到不同的活动..

 private void sendNotification(String message,String title,JSONObject extras) throws JSONException { String id = extras.getString("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; } 

uniqueIntNo放置唯一的整数如下:

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

用这个replace你的线。

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

您需要为每个通知添加一个唯一的ID,以便它们不会相互结合。 您可以使用此链接供您参考:

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

我解决了这个问题

 /** * Issues a notification to inform the user that server has sent a message. */ private static void generateNotification(Context context, String message, String keys, String msgId, String 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); String 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()); } 

另一种方法是把当前date转换成长,只需要最后4位数字。 这个数字很可能是唯一的。

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

以下是传递唯一通知ID的代码:

 //"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences. String 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. 

重置在特定范围的savedPreferences中的notificationId,就像我在1000年做的那样,所以它不会在将来产生任何问题。 让我知道如果你需要更多的细节信息或任何查询。 🙂

问题是与您的notificationId 。 认为它是一个数组索引。 每次更新通知时, notificationId都是存储价值的地方。 因为你不是递增你的int值(在这种情况下是你的notificationId ),所以它总是取代以前的值。 我猜想最好的解决办法就是在更新通知之后增加它。 如果你想保持它的持久性,那么你可以将你的notificationId的值存储在sharedPreferences 。 每当你回来,你可以抓住最后的整数值(存储在sharedPreferences中的sharedPreferences )并使用它。

在你的代码中使用下面的方法。

方法调用: –

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

方法:-

  *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<NOTIFICATION_ID_UPPER_LIMIT) { editor.putInt("currentNotificationTokenId", currentTokenId); // } }else{ //If reaches the limit reset to lower limit.. editor.putInt("currentNotificationTokenId", NOTIFICATION_ID_LOWER_LIMIT); } editor.commit(); return currentTokenId; }