Приложението ми е базирано на Google Map
и Location
, което включва комуникации клиент-сървър. Освен всичко това, периодично искам да актуализирам местоположението на потребителя към уеб сървъра. Сам се замислих и стигнах до два сценария по-долу,
Първо: Използвам Service
клас, за да извличам местоположението на потребителя периодично (вземайки предвид 2-3 часа веднъж) и да актуализирам на сървъра. В идеалния случай искам да избегна това! Защото според мен не е добре услугата да се изпълнява през цялото време само за качване на потребителско местоположение.
Втора мисъл: Мога да използвам IntentService
, за да извличам местоположението на потребителя периодично (вземайки предвид същите 2-3 часа) и да актуализирам към уеб сървъра. Тук IntentService
ще бъде извикан от AlarmManager
. Това е на всеки 2-3 часа, след като мениджърът на аларми стартира IntentService
.
Но смятам, че използването на AlarmManager
за 2-3 часа веднъж също не е добра идея.
Искам да разбера кой ще бъде ефективен и по-подходящ! Дали този сценарий може да бъде приложен при друг подход? Ако е така, помогнете ми да го направя!
Благодаря предварително...
AlarmManager
. Имайте услуга, работеща само когато активно предоставя стойност на потребителя. Гледането на тиктакането на часовника не предоставя активно стойност на потребителя. Дали този сценарий може да бъде приложен при друг подход? -- поискайте актуализации на местоположението да ви се доставят на всеки 2-3 часа отPendingIntent
. - person CommonsWare   schedule 12.12.2015AlarmManager
заедно сPendingIntent
. Чакащото намерение ще изпрати излъчване до класа на приемника, оттам трябва да извлека местоположение и да актуализирам на сървъра! Прав ли съм? - person Kavin Prabhu   schedule 12.12.2015getLastKnownLocation()
наLocationManager
, което може да върне неактуално местоположение илиnull
. Ако трябва да сте сигурни, че получавате текуща корекция на местоположението, това ще бъде много по-сложно. Получаването на местоположение е асинхронно (тъй като устройството може да трябва да включи GPS радиото и да изчака сателитни данни) и е изпълнено с проблеми (напр. потребителят не може да получи GPS сигнал). Ще завършите сWakefulBroadcastReceiver
, съчетано сService
. - person CommonsWare   schedule 12.12.2015PendingIntent
. В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