悄悄更新正在进行的通知

问题描述 投票:0回答:4

我有一个无线连接到其他设备的服务。启用该服务后,我会收到一条持续通知,说明它已启用。

启用服务后,用户然后连接到另一台设备。此时,我想更新我正在进行的通知以说明已连接的设备的名称。通过使用更新的信息再次调用

startForeground(ONGOING_NOTIFICATION, notification)
,这很容易做到;但是,每次调用时都会在栏上闪烁通知。我真正想要的是在后台悄悄更新的通知,而不是在通知栏上闪烁,这样用户在打开通知区域查看之前不会知道差异。

有什么办法可以在不调用

startForeground()
的情况下更新通知吗?

此行为仅发生在 Honeycomb 中。姜饼设备(我假设 Froyo 等)的行为符合预期。

android notifications android-3.0-honeycomb
4个回答
79
投票

我也遇到过这个问题,在之前的评论和一些挖掘的帮助下,我找到了解决方案。

如果您不希望通知在更新时闪烁,或者不希望持续占用设备的状态栏,您必须:

  • 在构建器上使用 setOnlyAlertOnce(true)
  • 使用相同的生成器 每次更新。

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

一些好的代码示例:

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) ,它就会更新通知而不会打扰用户。


34
投票

您应该根据docs更新现有通知。


12
投票

这对我有用,因此正在进行的活动(不是服务)通知会“静默”更新。

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 );

-4
投票

试试这个

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

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

© www.soinside.com 2019 - 2024. All rights reserved.