2010-04-22 10 views
18

Je souhaite placer une barre de progression dans la barre de notification. L'idée montre la barre de progression pendant que le programme télécharge un fichier sur un serveur. Tout le reste est correct, mais je n'arrive pas à comprendre comment actualiser la barre de progression dans la notification. Est-ce que quelqu'un connaît un modèle avec lequel jouer? Je veux dire, où je devrais rafraîchir la barre de progression, dans un service ou une activité et ainsi de suite.Actualiser la barre de progression dans la barre de notification

+0

Je ne sais pas si c'est possible. Avez-vous essayé avec un gif animé? – Macarse

+0

Pas encore, mais j'ai besoin de montrer en temps réel la progression du téléchargement, donc de toute façon j'ai besoin de mettre à jour la barre de progression. Je pense que l'utilisation d'un gif animé est valide si vous affichez seulement un message de "chargement". Quoi qu'il en soit, merci pour votre temps. – ahmontero

+0

je suis sûr que c'est possible. L'application Market affiche une barre de progression lors du téléchargement et de l'installation des applications dans la barre de notification ... – seanmonstar

Répondre

15

Je ne sais pas ce que votre code ressemble, donc je ne sais pas ce que vous devez modifier, Buti a fait des recherches dans la documentation. J'ai trouvé quelques trucs sur Notifications, ProgressBars, et RemoteViews. Plus précisément, dans RemoveView, vous pouvez mettre à jour la barre de progression. Ainsi, en combinant une partie du code d'exemple dans chaque lien, je reçois quelque chose comme ceci:

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

devez-vous définir une barre de progression dans votre mise en page xml personnalisée? Ou RemoteViews.setProgressBar() prendra-t-il soin de cela. La raison pour laquelle je demande est parce que http://developer.android.com/reference/android/widget/RemoteViews.html#setProgressBar (int, int, int, boolean) ils disent de donner "L'ID de la vue dont le texte devrait changer " – Pzanno

+0

@Pzanno - Je me demandais exactement la même chose (donc le +1). J'ai trouvé que vous devez définir votre propre barre de progression dans votre mise en page xml personnalisée. – ArtOfWarfare

+0

bon exemple ... j'utilise aussi la barre de progression dans ma vue custome mais ... ça bloque mon système je ne sais pas pourquoi ... tout se passe bien avec la barre de progression des notifications par défaut –

0

Pour supprimer un ProgressBar RemoteView utilisez le code suivant: -

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

Vous pouvez également utiliser View.GONE mais fera Android pour remplir l'espace vide.