Frage

ich eine Dienstleistung, die eine Datei heruntergeladen wird. Wenn der Download fertig ist, würde Ich mag meine „Heruntergeladene Dateien“ -Liste in meinem Activity aktualisieren, aber nur, wenn der Activity läuft. Ich will nicht die Activity zu starten, wenn es nicht bereits ausgeführt wird.

Ich hatte gehofft, ich könnte dies tun, indem Sie einen neuen Intent mit einigen speziellen Flagge zu machen.

Wer noch keine Ahnung, wie ich das erreichen kann? Ein winziges Codebeispiel vielleicht?

War es hilfreich?

Lösung

Sie können neue BroadcastReceiver Instanz erstellen und etwas tun in dieser Richtung auf Ihrer Aktivität des onResume () Methode:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));

Danach wird außer Kraft gesetzt myReceiver der OnReceive () -Methode eine Funktion aufzurufen, dass Updates die Komponente, die Sie wollen:

@Override 
public void onReceive(Context context, Intent intent) {
...
    updateViewWithData(service.getNewFileData());
...
}

Auf Ihrer Aktivität des onPause () -Methode nur austragen Empfänger:

unregisterReceiver(myReceiver);

Ich hoffe, dass diese Ihnen helfen würde, zu fragen, fühlen Sie sich frei, wenn es etwas unklar ist.

Andere Tipps

Die gute Möglichkeit, dies zu tun, ist Ihre „Heruntergeladene Dateien“ Aktivität auf den Dienst zu binden. Wenn Sie den Dienst binden, in der Funktion onServiceConnected, registrieren Sie einen Rückruf Binder. Dann, wenn Sie neue Daten zur Verfügung haben, Service-Anrufe nur, dass Rückruf. Wenn die Aktivität nicht ausgeführt wird, wird die Rückrufliste auf der Serviceseite leer sein, so wird es nicht Ihre Aktivitäten informieren.

Ein Beispiel für diesen Ansatz, einen Blick auf RemoteService.java in Android SDK:

samples \ ApiDemos \ src \ com \ Beispiel \ android \ api \ app \

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top