我正在开发一个应用程序,其中我实现了推送通知功能。 我的 onMessage - GCMIntentService.java的代码是:
@Override
protected void onMessage(Context context, Intent data) {
String message = data.getExtras().getString("message");
displayMessage(context, message);
generateNotification(context, message);
}
代码 generateNotification -
private static void generateNotification(Context context, String message) {
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, GCMMessageView.class);
notificationIntent.putExtra("message", message);
// 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;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
}
此代码工作正常。我正在收到推送消息和通知。
=>但是当我发送超过一条消息时,通知会重写。我只能在状态栏中看到最后一次通知。
应用程序的需要是 - 如果我发送多一个通知,那么所有应该显示在状态栏中。
因此,请在我的代码中指导我该怎么做。
答案 0 :(得分:8)
尝试将不同的通知ID(即nid)置于意图中,并针对每个新通知通知而不是0,这将阻止过度编写通知
PendingIntent intent = PendingIntent.getActivity(context, nid,notificationIntent, 0);
和
notificationManager.notify(nid, notification);
希望这会对你有所帮助
答案 1 :(得分:3)
获取随机数字:
Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
而不是:
notificationManager.notify(0, notification);
使用:
notificationManager.notify(m, notification);
答案 2 :(得分:2)
您好需要在notify方法中传递唯一的通知ID。 以下是传递唯一通知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.
如果您需要更多详细信息或任何查询,请与我们联系。 :)
答案 3 :(得分:1)
在
中触发Notification ID
时,您需要更新Notification.
notificationManager.notify(ID, notification);
如何吗
要设置通知以使其不同,请通过调用NotificationManager.notify(ID, notification).
向通知ID发出通知。要在发出通知后更改此通知,请创建NotificationCompat.Builder
对象,构建来自它的Notification
对象,并使用之前未使用的Notification
发出Different ID
。
如果之前的通知仍然可见,系统会根据Notification object
的内容对其进行更新。如果先前的通知已被取消,则会创建新通知。
有关更多信息,请访问官方docs
答案 4 :(得分:0)
notificationManager.notify(Different_id_everytime, notification);