Android LocationManager.isProviderEnabled() всегда возвращает false
У меня есть приложение, которое использует Network provider для его местоположения. Каждый раз при запуске приложений он проверяет, разрешен ли сетевой провайдер, используя метод isProviderEnabled() в LocationManager. Если он возвращает false, я предоставляю пользователю уведомление, чтобы включить Network Provider, а затем использовать приложение. Эта логика работала очень хорошо, за некоторыми исключениями с устройствами, не сертифицированными Google (это не проблема, поскольку они обычно не имеют API Карт). В последнее время с некоторыми устройствами на ICS и теперь на эмуляторе JellyBean я получаю согласованное "false" для isProviderEnabled(), хотя оно включено.
С тех пор я перешел к использованию строки, возвращенной из
Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED)), чтобы увидеть, содержит ли он "сеть". Это взлом, но он работает пока. Мне очень хотелось бы использовать метод isProviderEnabled().
Кто-нибудь видел эту проблему раньше?
Ответы
Ответ 1
Из документа API для: LocationManager.GPS_PROVIDER
Этот провайдер определяет местоположение с помощью спутников. В зависимости от условия, этот провайдер может занять некоторое время, чтобы вернуть исправление местоположения. Требуется разрешение ACCESS_FINE_LOCATION.
Итак, если вы не требуете ACCESS_FINE_LOCATION, он вернет false.
Ответ 2
@naqi @gkris
Я также заметил эту проблему, когда isProviderEnabled(LocationManager.GPS_PROVIDER)
возвращал false
.
Решением этого является также попросить пользователя установить Location Method
в High Accuracy
вместо Battery Saving
или Device Only
Этот параметр доступен в настройках местоположения и имеет другое имя на разных устройствах. На некоторых устройствах, на которых я тестировал, этот параметр имеет имя Mode
, Location Mode
, Location Method
и т.д. Также значение может быть High Accuracy
или GPS
или GPS, Wifi and Mobile Networks
Разработчики должны будут обучать пользователей этому.