Android GPS требует времени, чтобы быть точным - PullRequest
4 голосов
/ 09 декабря 2011

Я создал приложение для Android, которое определяет местоположение по долготе и широте одним нажатием кнопки.

Сначала я получаю последнее известное чтение местоположения, которое, ради аргумента, является неточным, когда я впервые загружаю приложение / включаю gps.

Что я хотел бы знать, так это как ждать, пока оно будет точным, как на картах Google, когда вы получаете тостовое сообщение «Ожидание местоположения».

Если вы видите, как можно улучшить код, это также будет полезно.

Код для справки:

public class Clue extends Activity {

    public static double latitude;
    public static double longitude;
    Criteria criteria;
    LocationManager lm;
    LocationListener ll;
    Location location;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.questions);

      criteria = new Criteria();
      criteria.setAccuracy(Criteria.ACCURACY_FINE);
      lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      ll = new MyLocationListener();
      lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll);          
}



private boolean weAreThere() {
    location = getLocation(); 
    longitude = location.getLongitude();
    latitude = location.getLatitude();

    return inCorrectPlace(param);
}

private Location getLocation() {
     lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll); 
      return lm.getLastKnownLocation(lm.getBestProvider(criteria, true));
}
}

    public class MyLocationListener implements LocationListener
    {
        public void onLocationChanged(Location loc)
        {        
             Clue.longitude = loc.getLongitude();
             Clue.latitude = loc.getLatitude();
        }
}

Спасибо за чтение, все ответы будут оценены.

Бен

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

Если Location.hasAccuracy() возвращает true, вы можете позвонить Location.getAccuracy(), чтобы получить точность в метрах, а затем отфильтровать те, которые вы считаете недостаточно точными.

Обратите внимание, что вы не используете LocationManager.GPS_PROVIDER, поэтому ваши исправления можно получить и другими способами (например, WiFi).

Обычно требуется около минуты, чтобы чип GPS "прогрелся" *, прежде чем получать исправления GPS (на улице).

* Под горячим я имею в виду покрытие спутников. Некоторые чипсеты отключаются ("холодные") через некоторое время для сохранения заряда батареи. Время до первого исправления (TTFF) больше, когда чип холодный.

2 голосов
/ 09 декабря 2011

Изначально вы должны получить исправление, используя getlastknownLocation ()

Кроме того, U может использовать фоновый сервис, который обновляет местоположение с помощью NETWORK.PROVIDER ..., который не разряжает батарею, если используется разумно ..., а также работает, если GPS выключен

Если сетевого провайдера нет, попытайтесь попросить пользователя включить GPS.

Если вы используете 2.2, попробуйте ПАССИВНЫЙ ПРОВАЙДЕР

2 голосов
/ 09 декабря 2011

Вот отличное объяснение,

http://android -developers.blogspot.com / 2011/06 / deep-dive-in-location.html

поможет вам понять, как именно это реализовать.

...