2009-08-24 19 views
17

Mam usługę, która pobiera plik. Po zakończeniu pobierania chcę zaktualizować listę "Pobrane pliki" w mojej wersji Activity, ale tylko pod warunkiem, że działa Activity. Nie chcę, aby Activity się uruchomił, jeśli jeszcze nie działa.Jak użyć intencji do aktualizacji działania?

Miałem nadzieję, że mogę to zrobić, tworząc nowy Intent z pewną specjalną flagą.

Ktoś ma pojęcie, jak to osiągnąć? Może mały przykład kodu?

Odpowiedz

19

Można utworzyć nową instancję BroadcastReceiver i zrobić coś wzdłuż tych linii na swojej onResume Działania związane jest() metody:

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

potem zastępują myReceiver za onReceive() w celu wywołania funkcji, która aktualizuje składnik, który chcesz : metoda

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

na OnPause swoją aktywność użytkownika(), po prostu wyrejestrować odbiornik:

unregisterReceiver(myReceiver); 

Mam nadzieję, że to ci pomoże, możesz zapytać, czy jest coś niejasnego.

+0

Jest to bardzo dobry sposób komunikacji. Ale co zrobić w przypadku, gdy wyniki zostały dostarczone, gdy aktywność została wstrzymana? Więc po onResume działanie może długo czekać na wyniki. Żadne dane nie zostaną odebrane, ponieważ dane zostały pominięte. –

3

Dobrym sposobem na to jest powiązanie działania "Pobrane pliki" z usługą. Po powiązaniu usługi, w funkcji onServiceConnected, zarejestruj wywołanie zwrotne modułu wiążącego. Następnie, gdy tylko dostępne będą nowe dane, usługa po prostu wywoła to oddzwanianie. Jeśli działanie nie jest uruchomione, lista połączeń zwrotnych po stronie usługi będzie pusta, więc nie będzie informować o Twojej aktywności.

Jako przykład takiego podejścia przyjrzeć RemoteService.java w Android SDK:

samples \ ApiDemos \ src \ com \ Przykład \ android \ Apis \ app \

+0

Jaka byłaby tego zaleta w porównaniu z celowymi komunikatami, takimi jak Dimitar Dimitrov? Dzięki – urSus

Powiązane problemy