我目前正在尝试测试我的代码,以确保正确设置通知。我这样做的方法是设置3个不同的警报,每隔一分钟显示一次通知。但问题是,1有效,但我从未见过其他两个。我的代码:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
Notification.Builder builder = new Notification.Builder(context)
.setTicker(intent.getStringExtra("event")+"-"+intent.getStringExtra("location"))
.setWhen(System.currentTimeMillis())
.setContentTitle(intent.getStringExtra("event"))
.setContentText(intent.getStringExtra("time_start")+"-"+intent.getStringExtra("location"))
.setSmallIcon(R.drawable.ic_launcher);
Notification notification = builder.getNotification();
mNotificationManager.notify(intent.getIntExtra("id", 0),notification);
它所获得的意图中的额外“id”是递增数字,所以像1,2,3一样。我正在使用AlarmManager
设置警报。我认为只要notify
中的第一个参数是唯一的,它就会显示通知,但它还没有。有什么理由吗?提前谢谢。
答案 0 :(得分:0)
由于NoBug在PendingIntent
上没有真正重新创建一个新实例,而只是检索到最后一个实例,我进行了一点挖掘后,我发现它不仅仅是说PendingIntent.FLAG_CANCEL_CURRENT
。当将其用作getBroadcast()
或getActivity()
中的参数时,它所做的只是使用旧参数并对其进行刷新。它不是覆盖它传递的Intent
的旧实例,而是仍然使用它,只是更改附加内容。但即便如此,它实际上并没有按照某种原因行事,至少在我的情况下,目标是一个接一个地弹出通知,大多数是相同的额外内容,当然是减去时间。
所以我发现使用intent.setAction("com.example"+System.currentTimeInMillis)
可以完成工作。这样做可以完全区分Intent
,所以当你创建一个新的时,它实际上只是一个不同的动作而不管PendingIntent
。我真的会建议任何人真正详细说明我的这个理论,因为它只是一个试错法的猜测。