Если у пользователя нет активированного GPS, он все равно может активировать Wi-Fi / сеть в качестве источника местоположения в настройках своего телефона, поэтому вы также можете использовать эти данные.
Вы всегда можете получитьПоследнее известное местоположение GPS или сети через
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
и / или
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
Оно содержит последнее известное местоположение устройства, которое может быть из вашего приложения или из любого другогоприложение, которое раньше использовало GPS.
Вы можете использовать два менеджера местоположения с разными провайдерами: один с GPS_PROVIDER, а другой с NETWORK_PROVIDER.GPS более точный, но обычно работает только на улице под открытым небом, поэтому NETWORK_PROVIDER работает в помещении, но менее точно.Кроме того, GPS может занять некоторое время, пока он не получит первое исправление после инициализации (иногда, т. Е. Минуту или более), в то время как сеть узнает местоположение почти сразу.
Вы должны прочитать этот пост, это оченьподробный и имеет пример кода: Какой самый простой и надежный способ узнать текущее местоположение пользователя на Android?
По второму вопросу: перед остановкой службы вам следуеттакже отмените регистрацию слушателя местоположения.Вы можете сделать это onPause или onDestroy.
locationManager.removeUpdates(baseLocationListener)
или
locationManager.removeAllUpdates()
Я думаю, что в вашем случае использование getLastKnowLocation () подойдет.
Тем не менее, если вы хотитеЧтобы явно знать о статусе GPS, вы можете внедрить прослушиватель статуса GPS, а затем использовать что-то вроде ниже, который говорит вам, есть ли у GPS какое-либо спутниковое исправление или нет - но, как я уже сказал, я не думаю, что это действительно необходимо.
final class GpsStatusListener implements GpsStatus.Listener {
public void onGpsStatusChanged(int i) {
if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
Log.d(AskTingTing.APP, "gpsx.fixed.");
for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
}
}
}
}
Посмотрите на ссылку выше для хорошего примера кода.