2010-08-21 2 views
7

Существует несколько тем, посвященных созданию пользовательских макетов в панели уведомлений. Проблема в том, что я должен пропустить что-то простое.Обновление строки прогресса в области уведомлений

У меня есть custom_notification_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:padding="3dip" 
       > 

    <TextView android:id="@+id/text" 
       android:text="Uploading" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#000" 
       /> 

    <ProgressBar 
      style="?android:attr/progressBarStyleHorizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:max="0" 
      android:progress="0" 
      android:layout_marginLeft="10dip" 
      android:id="@+id/progressBar" 
      /> 
</LinearLayout> 

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

NotificationManager mManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Notification notification = new Notification(R.drawable.icon, title, System.currentTimeMillis()); 
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout); 
contentView.setProgressBar(R.id.progressBar, 10, 0, false);   
contentView.setTextViewText(R.id.text, text);  
notification.contentView = contentView; 

Intent notificationIntent = new Intent(context, NotificationHandler.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.contentIntent = contentIntent; 
mManager.notify(APPID, notification); 

Наконец-то я пытаюсь обновить индикатор выполнения, который не работает.

contentView.setProgressBar(R.id.progressBar, 10, 5, false); 

В чем секрет фактического обновления уведомления?

+0

См. возможный дубликат: http://stackoverflow.com/questions/2689729/progress-bar-in-notification-bar –

ответ

10

Вы должны добавить эти две строки:

// update the notification object 
notification.contentView.setProgressBar(R.id.progressBar, 10, 5, false); 
// notify the notification manager on the update. 
mManager.notify(APPID, notification); 
+1

Проблема заключается в том, что на самом деле происходит пересканирование уведомления (позиция мудрая) в области уведомлений, если вл ютс, например, другие запущенные загрузки, которые также постоянно обновляют свои бары прогресса ... Однако я не знаю, можете ли вы что-то сделать об этом ... – ubuntudroid

+2

Вы, вероятно, забыли добавить «FLAG_ONGOING_EVENT» в ваше уведомление. – Xion

+0

FLAG_ONGOING_EVENT НЕ помогает. Уведомление продолжает прыгать. Протестировано на планшете трансформатора Asus. –

1

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

4

Помните, что вы не слишком часто уведомляете строку состояния. Если вы используете этот код внутри, например, onProgressUpdate для AsyncTask, и вы уведомляете КАЖДЫЙ прогресс, вы фактически блокируете строку состояния. Уведомлять только в случае изменений.

0

У меня были проблемы при обновлении индикатора выполнения слишком часто (я использую NotificationCompat.Builder для выполнения задания), из-за чего область уведомлений блокируется. Я решил проблему, пропуская обновления, если они происходят в течение минимального интервала времени, как это:

private static final long MIN_UPDATE_INTERVAL = 10000000; 

private long lastUpdateTime = System.nanoTime(); 

и в моем обновлении обратного вызова:

// Don't update too often 
if ((System.nanoTime() - lastUpdateTime)< MIN_UPDATE_INTERVAL) return; 

builder.setProgress(max, currentValue, false); 
notificationManager.notify(notificationID, builder.build()); 

lastUpdateTime = System.nanoTime(); 

Это предотвратить bloking области notiicaton, а также допускают плавное обновление индикатора прогресса

Смежные вопросы