Постоянное уведомление на Android-соте имеет противоречивое поведение - PullRequest
9 голосов
/ 06 июня 2011

У меня есть текущее уведомление для загрузки файлов в фоновом режиме.Мне удалось создать несколько одновременных обновлений уведомлений индикатора выполнения, которые также можно отменить.Это прекрасно работает на всех протестированных устройствах, за исключением некоторых более свежих планшетов Android с Honeycomb.

Эффект теперь заключается в том, что исходное сообщение уведомления постоянно отображается повторно, что не позволяет пользователю нажимать на часы, чтобы вызвать список текущих уведомлений.Таким образом, индикаторы выполнения даже не видны.Кто-нибудь был успешен в создании уведомлений о прогрессе на Honeycomb?

Кроме того, я также обнаружил, что мой черный текст уведомления больше не читается на черном фоне списка уведомлений.Есть ли способ установить белый текст для устройств Honeycomb?

Примечание: Это было протестировано на Optimus Pad L-06C под управлением Android 3.0.1 и Motorola Xoom

Ниже приведено уведомление о создании

// Create new notification for downloading
mNotification = new Notification(R.drawable.owl_icon, getNotificationText(R.string.notification_content_downloading), 0);
mNotification.flags |= (Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT);

// Create custom progress bar view
RemoteViews contentView = new RemoteViews(CourseSyncService.this.getPackageName(), R.layout.notification_downloading);
contentView.setTextViewText(R.id.notificationTitle, mCourseTitle);
contentView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
contentView.setTextViewText(R.id.notificationPercentage, "0%");
mNotification.contentView = contentView;

// Create pending intent for the notification
Intent notificationIntent = new Intent(CourseSyncService.this, CancelDownloadActivity.class);
notificationIntent.putExtra(CourseSyncService.KEY_USER_ID, mUserId);
notificationIntent.putExtra(CourseSyncService.KEY_COURSE_ID, mCourseId);
notificationIntent.putExtra(CourseSyncService.KEY_COURSE_TITLE, mCourseTitle);
PendingIntent contentIntent = PendingIntent.getActivity(CourseSyncService.this, mCourseId, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mNotification.contentIntent = contentIntent;

// Launch notification
mNotificationManager.notify(mCourseId, mNotification);

А вот как я обновляю уведомление:

// Update the progress bar of the notification view 
mNotification.contentView.setProgressBar(R.id.notificationProgressBar, mItemCount, mProgressCount, false);
mNotification.contentView.setTextViewText(R.id.notificationPercentage, String.valueOf(mProgress) + "%");
mNotificationManager.notify(mCourseId, mNotification);

Ответы [ 4 ]

7 голосов
/ 24 августа 2011

Чтобы решить эту проблему, вам нужно установить побитовое Notification.FLAG_ONLY_ALERT_ONCE в текущем уведомлении.Это гарантирует, что пользователь будет уведомлен только при первом его отображении.После этого им придется открыть панель уведомлений, чтобы просмотреть статус уведомления.

Notification notification = new Notification();
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE;
1 голос
/ 31 августа 2012

Я думаю, что нашел проблему, если кто-то все еще ищет.Проблема в том, что когда вы создаете новое уведомление, когда устанавливается текущее системное время.Если вы посмотрите на: http://developer.android.com/reference/android/app/Notification.html#when, вы прочитаете, что операция загрузки должна быть отмечена в начале.Если вы этого не сделаете (как я делал) и у вас есть несколько уведомлений о загрузке, они продолжат переупорядочивать себя в зависимости от поля когда.

0 голосов
/ 20 июня 2012

Чтобы решить эту проблему (на 4.0.3, не пытался на предыдущих уровнях API), мне нужно было сохранить ссылку на мой Notification, обновлять его каждый раз, когда что-то изменилось, а затем отправлять тот же самый объект Notification на NotificationManager.notify().

Хотя я устанавливал flags, как указано в ответе @ twaddingtion, и отправлял те же id на NotificationManager, что мое уведомление испортилось в SystemBar.

0 голосов
/ 06 июня 2011

Список уведомлений не имеет черного фона на ГБ;только строка состояния была изменена на черный.Какое устройство вызывает проблемы?Вы пробовали это на стандартном ГБ, чтобы убедиться, что это не проблема, специфичная для данного устройства, а не что-то, что изменилось в платформе?Знаете ли вы, является ли это устройство даже чем-то совместимым с CDD и прошедшим CTS?

...