2010-04-22 14 views
18

Ich möchte einen Fortschrittsbalken in der Benachrichtigungsleiste setzen. Die Idee ist, den Fortschrittsbalken anzuzeigen, während das Programm eine Datei auf einen Server hochlädt. Alles andere ist in Ordnung, aber ich kann nicht herausfinden, wie der Fortschrittsbalken in der Benachrichtigung aktualisiert wird. Kennt jemand ein Spielmuster? Ich meine, wo ich den Fortschrittsbalken aktualisieren sollte, in einem Dienst oder einer Aktivität und so.Aktualisieren Fortschrittsbalken in der Benachrichtigungsleiste

+0

Ich weiß nicht, ob es möglich ist. Hast du es mit einem animierten Gif versucht? – Macarse

+0

Noch nicht, aber ich muss in Echtzeit den Upload-Fortschritt zeigen, also muss ich irgendwie den Fortschrittsbalken aktualisieren. Ich denke, dass die Verwendung eines animierten Gifs gültig ist, wenn Sie nur eine "Lade" -Nachricht anzeigen. Wie auch immer, danke für deine Zeit. – ahmontero

+0

ich bin sicher, es ist möglich. Market App zeigt eine Fortschrittsleiste beim Herunterladen und Installieren von Apps in der Benachrichtigungsleiste ... – seanmonstar

Antwort

15

Ich weiß nicht, was Ihr Code wie folgt aussieht, so dass ich weiß nicht, was Sie ändern müssen, haben buti einige durch die Dokumentation zu suchen. Ich habe einige Sachen auf Notifications, ProgressBars und RemoteViews gefunden.

Insbesondere in RemoveView können Sie die Fortschrittsanzeige aktualisieren. So einige der Beispiel-Code kombiniert in jeder Verbindung, bekomme ich so etwas wie dieses:

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

muss eine Fortschrittsleiste in Ihrem benutzerdefinierten XML-Layout definiert sein? Oder wird RemoteViews.setProgressBar() dafür sorgen. Der Grund, warum ich frage, ist, weil http://developer.android.com/reference/android/widget/RemoteViews.html#setProgressBar(int, int, int, boolean) sie sagen, um "Die ID der Ansicht, deren Text sich ändern sollte" . " – Pzanno

+0

@Pzanno - Ich fragte mich genau das gleiche (also die +1). Ich habe festgestellt, dass Sie Ihren eigenen Fortschrittsbalken in Ihrem benutzerdefinierten XML-Layout definieren müssen. – ArtOfWarfare

+0

großes Beispiel ... ich benutze auch Fortschrittsbalken in meiner custome Ansicht, aber ... es hängt mein System Ich weiß nicht, warum ... alles läuft glatt mit Standardbenachrichtigung Fortschrittsbalken –

1

Sie können benutzerdefinierte Ansichten in Benachrichtigung verwenden:
https://developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView

+0

Es stellt sich heraus, dass diese Antwort die einzige ist, die für mich funktionierte, aber es gibt so eine enorme Menge an Informationen zu lesen, die Sie nicht wirklich können fassen Sie alles in einer knappen Antwort zusammen. Der Link ist zur offiziellen Dokumentation, wenn sie sich ändert, aktualisieren Sie einfach den Link. –

0

Um eine ProgressBar zu entfernen Remote den folgenden Code verwenden: -

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

Sie auch View.GONE verwenden können, aber das macht Android, um leeren Raum zu füllen.

Verwandte Themen