Подтвердить что ты не робот

Android, когда он включен onLocationChanged

Мне кажется, что его получают в первый раз, когда начинается действие, сразу после onCreate, тогда он, кажется, называется случайными интервалами, независимо от того, перемещаюсь я или нет.

Независимо от того, что это просто вызывается автоматически, если у меня есть такой код в методе onCreate?

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();

Правильно ли это?

Cheers, Майк.

4b9b3361

Ответ 1

Ваш вопрос непонятен изначально. Ваш код и заголовок не совпадают. Я отвечаю только за свой титул.

Вам необходимо зарегистрировать приемник местоположений для своего менеджера местоположений, а затем только onLocationChanged() будет вызываться в соответствии с настройками, которые вы указали при регистрации регистратора местоположений.

См. ниже код, как это сделать. Я использовал GPS-провайдер, вы также можете использовать любого провайдера на основе критериев.

LocationManger lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
                // TODO Auto-generated method stub
            }           
        });

Подойдя к вашему вопросу, onLocationChanged() будет вызываться, если текущее обновление местоположения не соответствует последнему известному местоположению.

Обновленное местоположение будет изменено для каждого minTime (в моем случае 1000 миллисекунд), а также если устройство переместило расстояние minDistance (в моем случае 0 метров).

Надеюсь, вы поймете это.

Ответ 2

если вы хотите поймать новые местоположения, вам необходимо зарегистрировать LocationListener следующим образом:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationListener listener = new LocationListener() {
   ...
}
locationManager.requestLocationUpdates(GPS_PROVIDER, intervall, distance, listener);

С интервал и расстояние вы можете настроить:

  • Если intervall больше 0, LocationManager может потенциально отдыхать за intervall миллисекунды между обновлениями местоположения
  • Если расстояние больше 0, местоположение будет транслироваться только в том случае, если устройство перемещается на расстояние.

Когда регистрируется LocationListener, LocationManager начинает получать ваше географическое местоположение и вызывает onLocationChanged(). Если расстояние очень низкое, может случиться так, что метод вызывается очень часто за короткий промежуток времени. В соответствии с интервал, LocationManager будет потом отдыхать.

Я думаю, LocationManager только начнет делать это, когда регистрируется LocationListener.

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

Cheers, Tobi

Ответ 3

public void onLocationChanged(Location location)

вышеуказанный метод вызывается автоматически после изменения вашего местоположения.