2013-06-21 5 views
1

Кажется, сколько секунд включено onLocationChanged? Я хотел бы обновить местоположение пользователя каждые 30 секунд, и я не знаю, как это сделать.Обновление местоположения каждые 30 секунд с помощью поставщика сетевого местоположения?

P.S: Я использую Network Location Provider, а не GPS. Я знаю, что GPS более точен, но я забочусь о потреблении батареи и о помещениях.

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

TextView tvLong,tvLati; 
    Button btnGet; 
    private LocationManager locationManager; 
    private String provider; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    tvLong =(TextView)findViewById(R.id.tvLong); 
    tvLati = (TextView)findViewById(R.id.tvLati); 
    btnGet = (Button)findViewById(R.id.btnGet); 
    btnGet.setOnClickListener(this); 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 
     Location location = locationManager.getLastKnownLocation(provider); 

     // Initialize the location fields 
     if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
      onLocationChanged(location); 
     } else { 
      tvLati.setText("Location not available"); 
      tvLong.setText("Location not available"); 
     } 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this); // I dont know what this exactly DOES. 

} 
public void onLocationChanged(Location location) { 

    lat = (location.getLatitude()); 
    lng = (location.getLongitude()); 
    String valueLati = "Latitude: " + lat; 
    String valueLong = "Longitude: " + lng; 

    tvLati.setText(valueLati); 
    tvLong.setText(valueLong); 

} 

ответ

1

Вариант 1

Если вам нужно позвонить onLocationChanged не использовать requestLocationUpdates, так как API полностью ненадежен на пользовательских телефонах Android (Samsung). Лучше вы используете AlarmManager и звоните getLastKnownLocation и звоните onLocationChanged самостоятельно.

Также обратите внимание, что getLastKnowLocation не работает на телефонах Samsung, поэтому вам нужно установить триггер api для обновления за сценой, прежде чем вы сможете ожидать, что он вернет хорошее место.

Звоните это прямо перед getLastKnownLocation, его взломать.

Примечание: это ничего не делает для вашего приложения, просто запускает бэкэнд-кеш, чтобы иметь хорошее Последнее известное местоположение.

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
     @Override 
     public void onProviderEnabled(String provider) { 
     } 
     @Override 
     public void onProviderDisabled(String provider) { 
     } 
     @Override 
     public void onLocationChanged(final Location location) { 
     } 
    }); 

Вариант 2

Junk все, и использовать новый LocationClient API. У этого тоже есть API-интерфейс getLastLocation, который вы можете использовать с AlarmManager. С LocationClient вам не нужно беспокоиться о bestprovider, доступном поставщике, выборе точности и датчиках. LocationClient объединяет их все в один хороший API.

Для сигнализации диспетчера

Я получил это работает после того, как какая-то боль. Так вот, link.

+0

HI Siddharth, здесь HomeScreen означает что ?. я попытался использовать объект менеджера местоположений, его возвращающ мне все еще NULL – Naruto

+0

HomeScreen - это ваша домашняя деятельность или любая деятельность, под которой вы это называете. Или даже лучше, ваш applicationContext. – Siddharth

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