悄悄地更新正在进行的通知

我有无线连接到其他设备的服务。 当服务启用时,我有一个持续的通知,说明它启用。

服务启用后,用户将连接到另一台设备。 此时,我想更新我正在进行的通知,说明已连接的设备的名称。 通过使用更新的信息再次调用startForeground(ONGOING_NOTIFICATION, notification)这很容易做到; 但是这会在每次调用时在条上闪烁通知。 我真正想要的是通知在后台悄悄更新而不在通知栏上闪烁,因此用户在打开通知区域之前不知道区别。

有没有更新通知,而无需调用startForeground()

这种行为只发生在蜂窝。 姜饼装置(我认为Froyo等)performance出所需的方式。

Solutions Collecting From Web of "悄悄地更新正在进行的通知"

我也经历过这个问题,在以前的评论和挖掘的帮助下,我find了解决办法。

如果您不希望通知在更新时闪烁,或者不断地浏览设备的状态栏,则必须:

  • 在构build器上使用setOnlyAlertOnce(true)
  • 对每个更新使用SAME Builder。

如果每次都使用一个新的构build器,那么我猜测Android必须重新构build视图,导致视图暂时消失。

一些好的代码的例子:

 class NotificationExample extends Activity { private NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); private mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //Different Id's will show up as different notifications private int mNotificationId = 1; //Some things we only have to set the first time. private boolean firstTime = true; private updateNotification(String message, int progress) { if (firstTime) { mBuilder.setSmallIcon(R.drawable.icon) .setContentTitle("My Notification") .setOnlyAlertOnce(true); firstTime = false; } mBuilder.setContentText(message) .setProgress(100, progress, true); mNotificationManager.notify(mNotificationId, mBuilder.build()); } } 

通过上面的代码,你可以用消息和进度(0-100)来调用updateNotification(String,int),它将更新通知而不恼人用户。

这对我来说是正常的,因此一个正在进行的活动(而不是SERVICE)通知被“默默地”更新。

 NotificationManager notifManager; // notifManager IS GLOBAL note = new NotificationCompat.Builder(this) .setContentTitle(YOUR_TITLE) .setSmallIcon(R.drawable.yourImageHere); note.setOnlyAlertOnce(true); note.setOngoing(true); note.setWhen( System.currentTimeMillis() ); note.setContentText(YOUR_MESSAGE); Notification notification = note.build(); notifManager.notify(THE_ID_TO_UPDATE, notification ); 

尝试这个

  int id = (int) Calendar.getInstance().getTimeInMillis(); 

在notify()方法中使用这个ID。 您的Android系统本身的时间创build一个唯一的ID