Подтвердить что ты не робот

Постоянное обновление текущего уведомления

У меня есть служба, которая подключается к другим устройствам по беспроводной сети. Когда служба включена, у меня есть постоянное уведомление, в котором говорится, что он включен.

После того, как услуга включена, пользователь затем подключается к другому устройству. На этом этапе я хотел бы обновить текущее уведомление, чтобы указать имя подключенного устройства. Это достаточно легко сделать, вызвав startForeground(ONGOING_NOTIFICATION, notification) снова с обновленной информацией; однако это мигает уведомление на панели при каждом вызове. Мне бы очень хотелось, чтобы уведомление тихо обновлялось в фоновом режиме, не мигая на панели уведомлений, чтобы пользователь не знал разницы, пока он или она не откроет область уведомлений, чтобы посмотреть.

Есть ли способ обновить уведомление без вызова startForeground()?

Такое поведение наблюдается только в Honeycomb. Прямоугольные устройства (и я предполагаю, что Froyo и т.д.) Ведут себя желаемым способом.

4b9b3361

Ответ 2

Я тоже испытал эту проблему, и с помощью предыдущих комментариев и немного копания я нашел решение.

Если вы не хотите, чтобы уведомления обновлялись при обновлении или постоянно отображали строку состояния устройства, вы должны:

  • Используйте setOnlyAlertOnce (true) в построителе
  • Использовать SAME Builder для каждого обновления.

Если вы каждый раз используете новый строитель, то я предполагаю, что Android должен снова перестроить представление, заставляя его ненадолго исчезнуть.

Пример некоторого хорошего кода:

class NotificationExample extends Activity {

  private NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
  private mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

  //Different Id 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());
  }
}

С помощью приведенного выше кода вы можете просто вызвать updateNotification (String, int) с сообщением и прогрессом (0-100), и он обновит уведомление, не раздражая пользователя.

Ответ 3

Это сработало для меня, в результате чего уведомление об активности (не 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 );

Ответ 4

Попробуйте это

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

Используйте этот идентификатор в методе notify(). Время вашей Android-системы само по себе создает уникальный идентификатор