Ответ 1
Необходимо обновить существующее уведомление http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Updating
У меня есть служба, которая подключается к другим устройствам по беспроводной сети. Когда служба включена, у меня есть постоянное уведомление, в котором говорится, что он включен.
После того, как услуга включена, пользователь затем подключается к другому устройству. На этом этапе я хотел бы обновить текущее уведомление, чтобы указать имя подключенного устройства. Это достаточно легко сделать, вызвав startForeground(ONGOING_NOTIFICATION, notification)
снова с обновленной информацией; однако это мигает уведомление на панели при каждом вызове. Мне бы очень хотелось, чтобы уведомление тихо обновлялось в фоновом режиме, не мигая на панели уведомлений, чтобы пользователь не знал разницы, пока он или она не откроет область уведомлений, чтобы посмотреть.
Есть ли способ обновить уведомление без вызова startForeground()
?
Такое поведение наблюдается только в Honeycomb. Прямоугольные устройства (и я предполагаю, что Froyo и т.д.) Ведут себя желаемым способом.
Необходимо обновить существующее уведомление http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Updating
Я тоже испытал эту проблему, и с помощью предыдущих комментариев и немного копания я нашел решение.
Если вы не хотите, чтобы уведомления обновлялись при обновлении или постоянно отображали строку состояния устройства, вы должны:
Если вы каждый раз используете новый строитель, то я предполагаю, что 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), и он обновит уведомление, не раздражая пользователя.
Это сработало для меня, в результате чего уведомление об активности (не 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(). Время вашей Android-системы само по себе создает уникальный идентификатор