2011-12-22 2 views
18

Мне кажется, что это происходит при первом запуске, сразу после onCreate, тогда он, кажется, называется в случайные интервалы, двигаюсь ли я или нет ???Android, когда именно находится onLocationChanged под названием

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

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

Это правильно ???

Cheers, Mike.

ответ

21

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

Вам необходимо зарегистрировать приемник местоположения для своего диспетчера местоположений, а затем только 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 метров).

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

+0

Извините за то, что Югандхар, у меня тоже есть вопросы в одном, я должен перестать это делать, так что это очень запутанно. –

+0

У меня есть тот же код, что и вы в другом действии, и это тот, который я бы хотел использовать, но я не могу убить его, как только он начнется, как бы я ни старался. Мне придется поместить это в другой пост. Спасибо за вашу помощь! –

+0

, но как вы можете отличить случаи, когда onlocationchanged не вызывается, потому что ваше местоположение не изменилось, из случаев, когда onlocationchanged не вызывается, потому что сигналы gps слабы и исправление местоположения не может быть получено? – dariusiv

0
public void onLocationChanged(Location location) 

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

+15

«Если вы столкнулись с проблемами, возможно, вы делаете что-то неправильно». - Блестящий! :) –

5

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

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

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

  1. Если Intervall больше 0, то LocationManager потенциально может отдыхать Intervall миллисекунд между обновлениями местоположения
  2. Если расстояния больше 0, место будет транслироваться только если устройство перемещается по расстоянию метров.

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

Я думаю, что LocationManager только начнет выполнять свою работу, когда зарегистрирован LocationListener.

Надежда, что помогает ...

Cheers, Tobi

Смежные вопросы