2016-04-10 9 views
2

Ich möchte einen Dienst erstellen, der Inhalte aus dem Internet herunterlädt und während der Ausführung den Fortschrittsdialog anzeigen möchte. Ich weiß, wie man den Fortschrittsdialog mit asynctask und volley verwendet, aber hier habe ich keine Ahnung, jetzt kann ich auf dem UI-Thread über das Beenden des Dienstes benachrichtigt werden, wenn ich den Dienst benutze.Android - Wie wird der Fortschrittsdialog angezeigt, während der Dienst läuft?

Wie kann ich das erreichen?

-Code folgt

public class MainActivity extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

} 

public void onClickStart(View v) { 
    startService(new Intent(this, MyService.class)); 
} 

public void onClickStop(View v) { 
    stopService(new Intent(this, MyService.class)); 
} 

} 


public class MyService extends Service { 

    public void onCreate() { 
    super.onCreate(); 
    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(LOG_TAG, "onStartCommand"); 
    someTask(); 
    return super.onStartCommand(intent, flags, startId); 
    } 

    public void onDestroy() { 
    super.onDestroy(); 
    } 

    public IBinder onBind(Intent intent) { 
    return null; 
    } 

    void someTask() { 
    new Thread(new Runnable() { 
     public void run() { 
     for (int i = 1; i<=5; i++) { 
      Log.d(LOG_TAG, "i = " + i); 
      try { 
      TimeUnit.SECONDS.sleep(1); 
      } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
     } 
     stopSelf(); 
     } 
    }).start(); 
    } 
+1

Für Dienste sollten Sie eine Benachrichtigung anzeigen. –

Antwort

1

Broadcast-Nachrichten erstellen, wenn Sie Fortschritt wollen bar von Ihrem Service anzeigen oder ausblenden:

Intent i = new Intent("yourPackage.SHOW_Progress"); 
sendBroadcast(i); 

dann schaffen Rundfunkempfänger und verarbeiten empfangene Nachrichten:

public class MyReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MainActivity mainActivity = ((MyApplication) context.getApplicationContext()).mainActivity; 
     mainActivity.showProgress(); 
    } 

} 

und in Ihrem mainActivity create-Methode für zeigen oder ausblenden Fortschrittsbalken

+0

Danke für die Antwort! Frage - Argument in Intent ("yourPackage.SHOW_Progress") ist obligatorisch oder kann alles in Klammern stehen? Kann ich spezielle Absichten innerhalb von onReceive je nach Argument der Absicht referenzieren? –

+0

Argument intent intent ist die Aktion der Absicht es kann alles sein, was Sie möchten, aber muss dasselbe sein wie das Argument, das Sie im Manifest-Datei-Empfängerabschnitt registrieren. ** 2 ** Sie können eine Broadcast-Absicht senden und mehrere zusätzliche Werte festlegen, je nachdem was Aktion, die Sie wollen –

+0

Vielen Dank! Du bist mein Sparer! –

0

Es gibt verschiedene Möglichkeiten zwischen einem Dienst und einer Aktivität zu kommunizieren.

Sie können eine Broadcast-Nachricht vom Dienst senden und in der Aktivität mit einem BroadcastReceiver verarbeiten.

Oder Sie könnten auch den Dienst binden und einen Befehl zurücksenden, wenn der Dienst seine Aufgabe erledigt hat.

Verwandte Themen