Проблема с менеджером по местоположению для мороженого sandwhich

Может ли кто-нибудь объяснить мне, что это за ошибка? Я получаю только для android 4 + и не ниже:

E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.getaddress/com.example.getaddress.MainActivity}: java.lang.IllegalArgumentException: requested provider network doesn't exisit

Solutions Collecting From Web of "Проблема с менеджером по местоположению для мороженого sandwhich"

Похоже, что поставщик местоположения NETWORK_PROVIDER недоступен в эмуляторах Android 4+ без API Google ( ну, на самом деле, я не тестировал их на всех, см. Ниже ). Настоящие устройства, на которых я тестировал, в порядке с ним (но у них у всех есть сервисы Google на них, было бы интересно протестировать с обычными чистыми версиями Android, может быть, с Kindles?).

Это не вопрос включения / отключения провайдера в настройках устройства, его просто нет в эмуляторе.

симптом

В основном этот код:

 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,mLocListener); 

Приведет к следующему исключению:

 java.lang.IllegalArgumentException: provider doesn't exisit: null 

На всех Android 4+ голой эмулятор (в отличие от Google-связанных эмуляторов)

Примечание: опечатка в «exisit» находится в фактической строке журнала.

диагностика

Получение списка всех поставщиков местоположения на целевом устройстве со следующим:

 List<String> providers = locationManager.getAllProviders(); 

Я вижу, что поставщик сети присутствует на

  • Физические устройства
  • Android 2.3.3 эмулятор (без API Google)
  • Android level 17 (4.2) эмулятор (с API Google)

Но не на

  • Андроид уровня 15 (4.0.3) эмулятор с API Google
  • Андроид 4.2 эмулятор (без API Google)

Я предполагаю, что по нетехническим причинам Google не разрешил службу определения местоположения в сети AOSP и ограничил ее использование версиями ОС под управлением Google с 4.2 (?).

Что я не знаю, есть ли замена службы сетевых сервисов на других устройствах (таких как Kindle) или нет.

Вероятное влияние на ваше приложение

Я бы не ожидал, что это повлияет на большинство смартфонов и планшетов. Однако он может

  • Несколько ухудшают вашу способность тестировать
  • Проблема совместимости для пользователей, использующих пользовательские / не-Google версии Android (еще раз, Kindle?)

Как обнаружить

Простой тест, такой как:

 locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) 

Может сказать вам безболезненно, если поставщик сети присутствует на устройстве. Обратите внимание: если он присутствует, но пользователь не активировал его, ваш локатор-получатель получит обратный вызов onProviderDisabled после запроса местоположения.