2010-08-21 13 views
7

Esistono diversi thread su come creare layout personalizzati nella barra di notifica. Il problema è che mi manca qualcosa di semplice.Aggiornamento della barra di avanzamento nell'area di notifica

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

ho anche un po 'di codice di prova che crea la notifica, che funziona e mostra la barra di avanzamento.

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

Infine, provo ad aggiornare la barra di avanzamento, che non funziona.

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

Qual è il segreto per l'aggiornamento effettivo della notifica?

+0

Vedere il possibile duplicato: http://stackoverflow.com/questions/2689729/progress-bar-in-notification-bar –

risposta

10

Si dovrebbe aggiungere queste due righe:

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

Il problema con questo è che fa effettivamente saltare la notifica (posizione) nell'area di notifica, se presente sono ad es. altri download in esecuzione che aggiornano costantemente le loro barre di avanzamento ... Tuttavia non so se si può fare qualcosa su questo ... – ubuntudroid

+2

Probabilmente hai dimenticato di aggiungere 'FLAG_ONGOING_EVENT' alla tua notifica. – Xion

+0

FLAG_ONGOING_EVENT NON aiuta. La notifica continua a saltare. Testato su un tablet trasformatore Asus. –

1

Nel file di layout, sono disponibili le ProgressBars set max a 0. Se arriva al massimo a 0, non può andare più in alto di 0. Set a 100

4

Ricordare di non notificare la barra di stato troppo spesso. Se si utilizza quel codice all'interno, ad esempio, su un aggiornamento di un AsyncTask e si notifica OGNI progresso, si bloccherà virtualmente la barra di stato. Notifica solo quando ci sono cambiamenti.

0

Ho avuto problemi durante l'aggiornamento della barra di avanzamento troppo spesso (sto usando un NotificationCompat.Builder per fare il lavoro) che stava causando il blocco dell'area di notifica. Ho risolto il problema saltando aggiornamenti se si verifica entro un tempo minimo intervallo simili:

private static final long MIN_UPDATE_INTERVAL = 10000000; 

private long lastUpdateTime = System.nanoTime(); 

e nel mio aggiornamento callback:

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

Questa impedire bloccaggi zona notiicaton e permette inoltre un aggiornamento liscia della barra di avanzamento

Problemi correlati