2010-04-22 22 views
18

Vorrei mettere una barra di avanzamento nella barra di notifica. L'idea mostra la barra di avanzamento mentre il programma carica un file su un server. Tutto il resto è ok, ma non riesco a capire come aggiornare la barra di avanzamento all'interno della notifica. Qualcuno conosce qualche schema con cui giocare? Voglio dire, dove dovrei aggiornare la barra di avanzamento, in un servizio o attività e così via.Aggiorna barra di avanzamento nella barra di notifica

+0

Non so se è possibile. Hai provato con una gif animata? – Macarse

+0

Non ancora, ma ho bisogno di mostrare in tempo reale l'avanzamento del caricamento, quindi in qualche modo ho bisogno di aggiornare la barra di avanzamento. Penso che l'uso di una gif animata sia valido se mostri solo un messaggio di "caricamento" o così. Comunque grazie per il tuo tempo. – ahmontero

+0

sono sicuro che sia possibile. L'app di mercato mostra una barra di avanzamento quando si scaricano e installano app nella barra di notifica ... – seanmonstar

risposta

15

non so che cosa il vostro codice è simile, quindi non so che cosa è necessario modificare, butI fatto qualche ricerca attraverso la documentazione. Ho trovato alcune cose su Notifications, ProgressBars e RemoteViews.

In particolare, in RemoveView, è possibile aggiornare la barra di avanzamento. Quindi, combinando alcuni dei codice di esempio in ogni link, ho qualcosa di simile:

public class MyActivity extends Activity { 
    private static final int PROGRESS = 0x1; 
    private static final int MAX_PROGRESS = 100; 

    private int mProgressStatus = 0; 

    private Handler mHandler = new Handler(); 

    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     //define Notification 
     //... 

     RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout); 
     contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
     notification.contentView = contentView; 

     // Start file upload in a background thread 
     new Thread(new Runnable() { 
      public void run() { 
       while (mProgressStatus < MAX_PROGRESS) { 
        mProgressStatus = doWork(); 

        // Update the progress bar 
        mHandler.post(new Runnable() { 
         public void run() { 
          contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
         } 
        }); 
       } 
      } 
     }).start(); 
    } 
} 
+2

devi avere una barra di avanzamento definita nel tuo layout xml personalizzato? Oppure RemoteViews.setProgressBar() si prenderà cura di questo. Il motivo per cui lo chiedo è perché http://developer.android.com/reference/android/widget/RemoteViews.html#setProgressBar(int, int, int, boolean) dicono di dare "L'id della vista il cui testo dovrebbe cambiare ". – Pzanno

+0

@Pzanno - Mi sono chiesto esattamente la stessa cosa (quindi il +1). Ho scoperto che devi definire la tua barra di avanzamento nel tuo layout xml personalizzato. – ArtOfWarfare

+0

ottimo esempio ... sto anche utilizzando la barra di avanzamento nella mia vista personale ma ... si blocca il mio sistema non so perché ... tutto va liscio con la barra di avanzamento delle notifiche di default –

0

Per rimuovere un ProgressBar dal RemoteView utilizzare il seguente codice: -

remoteViews.setViewVisibility(R.id.progressBar, View.INVISIBLE); 

È anche possibile utilizzare View.GONE ma che renderà Android per riempire lo spazio vuoto.

Problemi correlati