我在扩展GcmListenerService的类中有以下通知逻辑,并在一个通知到达时被调用。然后,当点击时,应用程序会将您带到MainActivity,正确显示通知。
public static void mostrarAvisoBarraEstado(Context context, String alerts)
{
Intent notificationIntent = new Intent(context.getApplicationContext(), MainActivity.class);
notificationIntent.putExtra("alerts", alerts);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, new Random().nextInt(),
notificationIntent, 0);
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(context.getString(R.string.app_name))
.setContentText("Alert received")
.setSmallIcon(R.drawable.nubeazul)
.setOnlyAlertOnce(true)
.setContentIntent(pendingIntent)
.setWhen(System.currentTimeMillis())
.setGroup(GRUPO_ALERTAS)
.setGroupSummary(true)
.setAutoCancel(true)
.build();
//notificationManager.notify(0, notification);
notificationManager.notify (new Random().nextInt(), notification);
}
所以,现在,每一个都是单独显示的,如果它们累积起来,结果相当丑陋,所有通知栏都充满了小图标。你们可以帮助一个优雅的解决方案,因为我是Android新手吗?非常感谢!
今天新增加的东西!
如果我将通知随机输出,留下类似notificationManager.notify(0, notification);
的内容,我只会收到一个通知,但没有别的,那么当它启动MainActivity(它的onResume()方法)时,它只会显示一个通知,所有"堆积的"只需在单个通知上单击时丢弃。我想要实现的是,在保持一个干净的显示,即:所有GCM的一个组通知,如果我点击该组,我将通过Alerts.class显示每个通知(类似于循环通知,并为每个人启动活动警报。
@Override
protected void onResume()
{
super.onResume();
if (getIntent().hasExtra("alerts"))
{
Bundle extras = getIntent().getExtras();
Intent intent = new Intent(this, Alerts.class);
intent.putExtra("alerts" , extras.getString("alerts"));
startActivity(intent);
getIntent().removeExtra("alerts");
}
}
然后,Alerts类将很好地显示它所执行的警报,但每个通知都会显示一个。
答案 0 :(得分:0)
所以我尝试了你的代码并设法重现你遇到的问题(我只是手动创建了虚拟通知)。所以Notification
s堆积的原因是因为你在notificationManager.notify()
传递的id彼此不同。至于到目前为止我在Notification
和NotificationManager
行为上观察到的内容,notify()
中指示的ID表示id位置/位置(不知道该叫什么) Notification
下的NotificationManager
,而不是Notification
本身的ID。
将NotificationManager
想象成一个数组或列表。例如,如果状态栏上有3个可见通知:
Notification 1
,Notification 2
,Notification 3
及其ID如下:0,1,2。
如果您生成新 Notification 4
,然后调用notify
将其作为参数传递,并将id 1作为当前显示在{{1会产生这样的结果:
NotificationManager
,Notification 1
,Notification 4
及其ID如下:0,1,2。
因此,您发送通知并且不进行分组的原因是,在传递Notification 3
时调用notify()
时,您最终会遇到不同的ID。
根据我认为你的目标行为 - 将你的应用程序的通知加入到一个 - 实现在理解时很简单,但我认为它仍然有点棘手。如果已经有超过1个通知,则必须首先检查,如果是,则创建包含详细信息的摘要通知,并单独显示(介意ID;) )以及所有其他的东西。我发现这个blog虽然我认为可以帮助你。或者您只需查看Stacking Notifications上的官方文档。
因此,当涉及到应用通知时,只需使用一个ID传入new Random().nextInt()
。希望这可以帮助。干杯! :d