getLastKnownLocation()
использует местоположение (я), ранее найденное другими приложениями.если ни одно приложение не сделало этого, то getLastKnownLocation()
вернет ноль.
одна вещь, которую вы можете сделать со своим кодом, чтобы иметь больше шансов получить последнее известное местоположение - итерация по всем включенным провайдерам, а непросто лучший поставщик.например,
private Location getLastKnownLocation() {
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
ALog.d("last known location, provider: %s, location: %s", provider,
l);
if (l == null) {
continue;
}
if (bestLocation == null
|| l.getAccuracy() < bestLocation.getAccuracy()) {
ALog.d("found best last known location: %s", l);
bestLocation = l;
}
}
if (bestLocation == null) {
return null;
}
return bestLocation;
}
, если ваше приложение не может справиться без местоположения, и если нет последнего известного местоположения, вам нужно будет прослушивать обновления местоположения.Вы можете взглянуть на этот класс для примера:
https://github.com/farble1670/autobright/blob/master/src/org/jtb/autobright/EventService.java
см. метод onStartCommand()
, где он проверяет, включен ли поставщик сети.если нет, то используется последнее известное местоположение.если он включен, он регистрируется для получения обновлений местоположения.