См. мой ответ о том, почему вы не можете просто "получить" позицию GPS для некоторого фона.Получение GPS-положения один раз в вашем методе onCreate () (с ленивыми проверками инициализации, чтобы увидеть, есть ли у вас уже GPS-координаты в случае нескольких вызовов onCreate ()), может быть неправильным подходом для вашего приложения и может привести кприложение должно быть принудительно закрыто ОС Android.
Если вы определили, что последнее известное местоположение устройства всегда достаточно хорошо для вашего приложения, то вызывайте его каждый раз, когда вызывается метод onCreate (),все будет в порядке, так как не нужно использовать схему GPS.Поэтому, если последнее известное местоположение достаточно хорошо, просто запрашивайте его каждый раз, когда вызывается метод onCreate (), и избегайте сложности ленивых проверок мягкого типа инициализации.
Если последнее известное местоположение не всегда хорошодостаточно для вашего приложения, тогда вы не сможете надежно дождаться исправления в методе onCreate (), так как вы рискуете, что исправление местоположения займет слишком много времени, в результате чего система Android принудительно закроет приложение, не отвечающее на запросы, поскольку оно не вернулось из onCreate () метод во времени.Вместо этого вам нужно запустить фоновую асинхронную задачу в методе onCreate () (проверяя, что у вас еще не запущена такая асинхронная задача), который начинает прослушивать обновления местоположения до тех пор, пока не будет получено достаточно хорошее исправление, а затем запоминает это местоположение,остановка слушателей местоположения и, следовательно, отключение схемы GPS.Используйте код в строке:
private MyAsynchGpsLocationListener mGpsListener = null;
public ... onCreate() {
if (mGpsListener == null) {
mGpsListener = new MyAsynchGpsLocationListener();
mGpsListener.start();
}
}
someMethod() {
if (mGpsListener != null) {
Location myLocation = mGpsListener.getLocation();
if (myLocation != null) {
// Do something with a "good enough" location
}
}
}