Извличане на местоположението на потребителя във фонов режим и качването му на уеб сървър (опитвайки се да избегне използването на услугата)

Приложението ми е базирано на 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