См. мой ответ о том, почему вы не можете просто "получить" позицию 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
}
}
}
person
Colin
schedule
23.12.2011