Android - получить местоположение только один раз - PullRequest
13 голосов
/ 19 января 2011

Мне нужно получить текущее местоположение пользователя в приложении для Android, поэтому я прочитал некоторые учебные пособия и примеры в Интернете, но я вижу, что во всех примерах местоположение извлекается из «onLocationChange», что означает, чтопри каждом изменении местоположения выполняется код в «onLocationChange».

Мне нужно только узнать местоположение пользователя в момент запуска приложения.

Спасибо за вашу помощь!

Ответы [ 5 ]

10 голосов
/ 19 января 2011

Вы можете получить последнее известное местоположение, используя код ниже. Он получает поставщиков местоположения и перебирает массив в обратном направлении. то есть начинается с GPS, если нет GPS, то получает сетевое местоположение. Вы можете вызывать этот метод всякий раз, когда вам нужно получить местоположение.

private double[] getGPS() {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
List<String> providers = lm.getProviders(true);

/* Loop over the array backwards, and if you get an accurate location, then break                 out the loop*/
Location l = null;

for (int i=providers.size()-1; i>=0; i--) {
l = lm.getLastKnownLocation(providers.get(i));
if (l != null) break;
}

double[] gps = new double[2];
if (l != null) {
gps[0] = l.getLatitude();
gps[1] = l.getLongitude();
}
return gps;
}
3 голосов
/ 14 марта 2016
3 голосов
/ 19 января 2011

Вы можете сделать это с помощью LocationManager. getLastKnownLocation

0 голосов
/ 14 августа 2013

Для метода getGPS(), который Фобос предложил для правильной работы, вы должны разрешить доступ в вашем AndroidManifest.xml

Это избавит вас от ошибки получения 0.0

Добавьте эти строки:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
0 голосов
/ 19 января 2011

Поместите это в основной вид деятельности:


boolean bFirst = true;
function void onCreate(blabla) {
  if(bFirst) {
    //Do your stuff to get the location
    bFirst = false;
  }
}

Поместите то же самое в onResume ();

...