Mam aplikację, która prawie nie wymaga interakcji użytkownika, ale wymaga Geofence. Czy mogę uruchomić to całkowicie w ramach usług w tle?Czy mogę całkowicie uruchomić system Android GeoFencing w ramach usług w tle?
Po pierwszym uruchomieniu usługa wykona czynność. To działanie uruchomi usługę i zarejestruje BroadcastReceiver dla BOOT_COMPLETED, więc usługa rozpocznie się przy starcie systemu. Jest mało prawdopodobne, że ta aktywność zostanie kiedykolwiek uruchomiona ponownie.
Usługa ustawi alarm, aby cyklicznie wyłączał się, co spowoduje, że IntentService pobierze listę lokalizacji z sieci. Ta IntentService następnie utworzy Geofences wokół tych lokalizacji i utworzy PendingIntents, które będą uruchamiane, gdy zbliżą się lokalizacje. Z kolei te PendingIntents spowodują, że inna IntentService podejmie jakieś działanie.
Wszystko to musi się zdarzyć w tle, bez interakcji użytkownika z wyjątkiem rozpoczęcia działania po raz pierwszy po instalacji. W związku z tym działanie nie będzie oddziaływać z usługą LocationClient ani żadnymi usługami lokalizacyjnymi.
Mam tę konfigurację z urządzeniami proximityAlerts, ale chcę przejść do nowego interfejsu Geofencing API z powodów związanych z żywotnością baterii. Jednak słyszałem, że może być kilka problemów z używaniem LocationClient z poziomu usługi. Konkretnie, co słyszałem (przepraszam, nie ma wzmianki, tylko ze słyszenia roszczeń):
- lokalizacja klient opiera się na ui dostępności dla obsługi
- gdy wywołana z wątku tła błędu LocationClient.connect() zakłada, że jest wywoływany z głównego wątku interfejsu (lub innego wątku z looperem zdarzeń), więc wywołanie połączenia nigdy nie jest wywoływane, jeśli wywołujemy tę metodę z usługi działającej w tle wątek
Po zbadaniu nie widzę z jakiegokolwiek powodu, dlaczego tak się stało, lub dlaczego przestałbym robić to, co chcę. Miałem nadzieję, że będzie to prawie zamiennik dla urządzeń nearAlerts ...
Czy ktoś może rzucić trochę światła na rzeczy tutaj?
Nie mogłem znaleźć i API do listy Geofences, i chciałbym również mieć jeden. Martwię się również, że mój sqlite db i faktyczna lista zarejestrowanych ogrodzeń jest zsynchronizowana ... –