如何在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; }