Извлечение местоположения пользователя в фоновом режиме и загрузка его на веб-сервер (пытаясь избежать использования Сервиса)

Мое приложение основано на Google Map и Location, которые включают взаимодействие клиент-сервер. Помимо всего этого, периодически я хочу обновлять местоположение пользователя на веб-сервере. Я сам подумал и пришел к двум нижеприведенным сценариям:

Первый: я использую класс Service для периодического получения данных о местоположении пользователя (примерно 2-3 часа один раз) и обновления на сервере. В идеале я хочу избежать этого! Потому что просто загружать местоположение пользователя нехорошо постоянно запускать службу, вот что я чувствую.

Второе мнение: я могу использовать IntentService для периодического получения местоположения пользователя (с учетом тех же 2-3 часов) и обновления на веб-сервере. Здесь IntentService будет вызываться AlarmManager. То есть каждые 2-3 часа один раз аларм-менеджер будет запускать IntentService.

Но я чувствую, что использовать AlarmManager в течение 2-3 часов один раз тоже не очень хорошая идея.

Я хочу понять, какой из них будет эффективнее и актуальнее! Может ли этот сценарий быть реализован в каком-либо другом подходе? Если это так, помогите мне сделать это!

Заранее спасибо...


person Kavin Prabhu    schedule 12.12.2015    source источник
comment
Но я чувствую, что использовать AlarmManager в течение 2-3 часов тоже не очень хорошая идея - почему? Мы не можем решить ваши проблемы, если вы действительно не выразите свои опасения. Я хочу понять, какой из них будет эффективным -- AlarmManager. Запускайте службу только тогда, когда она активно приносит пользу пользователю. Наблюдение за ходом часов не несет активной ценности для пользователя. Может ли этот сценарий быть реализован в каком-либо другом подходе? -- запрашивать обновления местоположения каждые 2-3 часа до PendingIntent.   -  person CommonsWare    schedule 12.12.2015
comment
Итак, я понял, что я должен использовать AlarmManager вместе с PendingIntent. Ожидающее намерение отправит широковещательную рассылку классу получателя, оттуда я должен получить местоположение и обновить его на сервере! Я прав?   -  person Kavin Prabhu    schedule 12.12.2015
comment
Только если вы собираетесь использовать что-то вроде getLastKnownLocation() для LocationManager, что может вернуть устаревшее местоположение или null. Если вам нужно убедиться, что вы получаете исправление текущего местоположения, это будет намного сложнее. Получение местоположения является асинхронным (поскольку устройству может потребоваться включить GPS-радио и ждать спутниковых данных) и сопряжено с проблемами (например, пользователь не может получить сигнал GPS). Вы закончите использовать WakefulBroadcastReceiver в сочетании с Service.   -  person CommonsWare    schedule 12.12.2015
comment
Хорошо, после прочтения всех возможных решений, которые я реализовал с помощью PendingIntent. В классе BroadcastReceiver я все время получаю местоположение как метод null. In onReceive`, который я использовал Location location = (Location) intent.getExtras().get(LocationManager.KEY_LOCATION_CHANGED); В SplashScreen я реализовал GoogleApiClient, ResultCallback для настроек местоположения и LocationListener. В обратных вызовах onConnected(Bundle b) прописал PendingIntent. Теперь, как получить местоположение вместо нуля?   -  person Kavin Prabhu    schedule 12.12.2015