вам, вероятно, следует использовать объект LocationManager
для получения обновлений Location и доступа к ним Вы можете запросить его для последнего известного местоположения для быстрого обновления.
Ключевым моментом является то, что я прошу менеджера местоположения начать прослушивание, а затем оттуда я могу попросить быстрые обновления в любое время. Я храню обновленную информацию о местоположении в моем ApplicationContext
объекте (который я называю appModel
локально), который является постоянным на протяжении всей жизни объекта.
Я использую LocationManager
так:
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
startListening();
Начало прослушивания выглядит так:
public void startListening() {
if (gpsLocationListener == null) {
// make new listeners
gpsLocationListener = new CustomLocationListener(LocationManager.GPS_PROVIDER);
// request very rapid updates initially. after first update, we'll put them back down to a much lower frequency
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 200, gpsLocationListener);
}
//get a quick update
Location networkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//this is the applicationContext object which persists for the life of the applcation
if (networkLocation != null) {
appModel.setLocation(networkLocation);
}
}
Ваш слушатель местоположения может выглядеть так:
private class CustomLocationListener implements LocationListener {
private String provider = "";
private boolean locationIsEnabled = true;
private boolean locationStatusKnown = true;
public CustomLocationListener(String provider) {
this.provider = provider;
}
@Override
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
handleLocationChanged(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
public void onProviderEnabled(String provider) {
startListening();
}
public void onProviderDisabled(String provider) {
}
}
private void handleLocationChanged(Location location) {
if (location == null) {
return;
}
//get this algorithm from: http://developer.android.com/guide/topics/location/obtaining-user-location.html
if (isBetterLocation(location, appModel.getLocation())) {
appModel.setLocation(location);
stopListening();
}
}
Удачи!