Подтвердить что ты не робот

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().

Кто-нибудь видел эту проблему раньше?

4b9b3361

Ответ 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

Разработчики должны будут обучать пользователей этому.