Android: быстро получите GPS-позицию - PullRequest
3 голосов
/ 18 марта 2012

Мне нужно найти местоположение GPS в моем приложении, которое не должно быть точным (около 1 км точности), но мне нужно очень быстро ! (1s-5s)

Я зарегистрировал этого слушателя:

mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);

Но это занимает слишком много времени, чтобы найти исправление! Кто-нибудь знает метод, с помощью которого я могу найти местоположение быстрее (мне просто нужен текущий город, в котором находится устройство). Спасибо!

Ответы [ 2 ]

7 голосов
/ 18 марта 2012

Так как вам не нужно очень мелкозернистое местоположение, и вам нужно это быстро, вы должны использовать getLastKnownLocation. Как то так:

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);

Edit: В блоге разработчика Android есть хороший пост здесь об этом. Этот фрагмент из блога перебирает всех поставщиков местоположения, чтобы получить последнее известное местоположение. Кажется, это то, что вам нужно

List<String> matchingProviders = locationManager.getAllProviders();
for (String provider: matchingProviders) {
  Location location = locationManager.getLastKnownLocation(provider);
  if (location != null) {
    float accuracy = location.getAccuracy();
    long time = location.getTime();

    if ((time > minTime && accuracy < bestAccuracy)) {
      bestResult = location;
      bestAccuracy = accuracy;
      bestTime = time;
    }
    else if (time < minTime && 
             bestAccuracy == Float.MAX_VALUE && time > bestTime){
      bestResult = location;
      bestTime = time;
    }
  }
}
5 голосов
/ 18 марта 2012

Для этого вы можете определить свои критерии, используя Критерии.

public void setCriteria() {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
        provider = locationManager.getBestProvider(criteria, true);
    }

Для получения дополнительной информации обратитесь к этой ссылке .

А затем используйте провайдера, чтобы получить ваше местоположение,

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...