2010-10-04 12 views
11

Piszę aplikację, która musi okresowo sprawdzać serwer pod kątem nowych wiadomości i powiadamiać użytkownika. Widziałem kilka przykładów użycia AlarmManagera do uderzenia w BroadcastReciever, co wydaje się być słuszne, ale nie wydaje mi się, żeby to działało.Android: uruchamianie zadania w tle za pomocą aplikacji AlarmManager

Czy ktoś może mi pokazać samouczek krok po kroku dla tego rodzaju rzeczy (powtarzanie alarmu, który uruchamia jakiś kod tła, który uruchamia powiadomienie)?

TIA

+0

Pokaż nam co próbowali, ze szczegółami, jak dokładnie się niepowodzeniem. –

+0

Moje samouczki są w książkach (przepraszam!). Być może pomoże strona i projekt demonstracyjny "WakefulIntentService": http://github.com/commonsguy/cwac-wakeful – CommonsWare

+0

Udostępniaj kod, umieram! –

Odpowiedz

31

Oto jeden kompletny przykład: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/

Wzór ten przykład używa, a jeden, że odkryłem, że wydaje się działać dobrze, jest użycie odbiornika startowego na ustawienie AlarmManager (i oczywiście również sprawdzić, aby rozpocząć odpytywanie z głównego Aktywny też, dla przypadku, gdy aplikacja jest zainstalowana i system nie jest uruchomiony) i mają AlarmManager wysłać Intent do innego odbiornika: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealBootReceiver.java

a następnie od AlarmReceiver rozpocząć IntentService: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealAlarmReceiver.java

ze swojego IntentService następnie dokonać połączenia sieciowego do sondowania danych, lub co trzeba zrobić. IntentService automatycznie umieszcza swoje prace w wątku tła, to bardzo przydatny: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealService.java

Sprawdź docs dla tych klas też dużo w tam.

Zastrzeżenie w tym przykładzie jest to, że robi nie kontrakt z szczeliny zamka wake (doskonała kod CommonsWare robi, że jeśli jest to potrzebne), ale może dać ci jeszcze kilka pomysłów, jak potencjalnie objąć " odpytywanie za pomocą funkcji AlarmManager i usługi ".

UPDATE: kod jest teraz tutaj: https://github.com/charlieCollins/android-in-practice

+0

Dziękuję, to było bardzo pomocne. – rpcutts

+0

Ta odpowiedź wydaje się być bardzo zbliżona do tego, co zrobiłem. Powinien pracować dla Ciebie. – mtmurdock

+2

Możesz chcieć umieścić WakeLock na IntentService, aby upewnić się, że telefon nie przechodzi w stan uśpienia bezpośrednio po wykonaniu onReceive. Zdrap to, po prostu przeczytaj swoje zastrzeżenie ... – charroch

Powiązane problemy