2010-08-21 8 views
7

Ya hay varios hilos sobre cómo hacer diseños personalizados en la barra de notificaciones. El problema es que me falta algo simple.Actualización de la barra de progreso en el área de notificación

Tengo un 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> 

también tengo algo de código de prueba que crea la notificación, que funciona y muestra la barra de progreso.

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

Finalmente trato de actualizar la barra de progreso, que no funciona.

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

¿Cuál es el secreto para actualizar realmente la notificación?

+0

Ver posible duplicado: http://stackoverflow.com/questions/2689729/progress-bar-in-notification-bar –

Respuesta

10

Debe añadir estas dos líneas:

// 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

El problema con esto es que realmente hace que la notificación salte (posición sabia) en el área de notificación, si hay son v.g. otras descargas ejecutándose que también actualizan constantemente sus barras de progreso ... Sin embargo, no sé si puedes hacer algo al respecto ... – ubuntudroid

+2

Probablemente olvidaste agregar 'FLAG_ONGOING_EVENT' a tu notificación. – Xion

+0

FLAG_ONGOING_EVENT NO ayuda. La notificación sigue saltando. Probado en una tableta de transformador Asus. –

1

En el archivo de diseño, tiene las ProgressBars conjunto máximo a 0. Si maxes a 0, no puede ir más alto que 0. Conjunto a 100

4

Recuerde no notificar la barra de estado con demasiada frecuencia. Si usa ese código dentro, por ejemplo, un onProgressUpdate de una AsyncTask y notifica CADA progreso, prácticamente bloqueará la barra de estado. Notificar solo cuando haya cambios

0

Tuve problemas al actualizar la barra de progreso con demasiada frecuencia (estoy usando un NotificationCompat.Builder para hacer el trabajo) que causaba el bloqueo del área de notificación. He resuelto el problema por saltarse las actualizaciones si se produce dentro de un tiempo mínimo intervalo de la siguiente manera:

private static final long MIN_UPDATE_INTERVAL = 10000000; 

private long lastUpdateTime = System.nanoTime(); 

y en mi actualización de devolución de llamada:

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

Este prevenir bloking la zona notiicaton y también permite una actualización suave de la barra de progreso

Cuestiones relacionadas