Intereting Posts
Объявление глобальной переменной для использования во всех видах деятельности Android ProgressBar оформлен как просмотр прогресса в SwipeRefreshLayout Проблема с Android-студией 2 после обновления до версии 6 Как вернуться от призыва Используя startActivityForResult, как получить requestCode в дочерней активности? Разрешения USB без подсказки Смещение / перемещение вкладки в сочетании с ScrollView? Правильное использование универсального загрузчика изображений Сохранить интерфейс (прослушиватель) в onSaveInstanceState Облачные сообщения Google: значение полезной нагрузки всегда строка Позиционирование изображения внутри ImageView с максимальной высотой и максимальной шириной Можно ли динамически изменить резюме EditTextPreference в Android? Блокировка от вторжения отключена на переднем плане с режимом Doze – новая оптимизация батарей в Android M Можно ли предварительно просмотреть страницу рынка приложений перед публикацией? Как правильно скрыть и отобразить панель действий с помощью API новой библиотеки дизайна?

Почему Android Geocoder выбрасывает исключение «Service not Available»?

Приложение использует объект Geocoder . Он отлично работает на моем складе Froyo Nexus One. Но затем я запускаю то же приложение на другом устройстве (планшет Advent Vega 10), также запускающий Froyo), и я получаю это исключение: Service not Available . Метод, который я использую, – getFromLocationName() , я getFromLocationName() против Android 1.6 API Google.

Я знаю о проблеме, когда это исключение выбрасывается на эмулятор, но я подозреваю, что это другое. Зачем его бросать на одно устройство с Froyo, но не на другое?

Приложение представляет собой приложение для местоположения, и поскольку планшет не имеет GPS или мобильной сети, в сценарии, когда соединение Wi-Fi не предоставляет местоположение, пользователь должен вручную указать его, поэтому не имея возможности использовать объект Geocoder Это плохая новость.

Я мог бы добавить способ для пользователя выбрать местоположение на карте, но это не идеально. Возможно, я мог бы использовать API Карт Google напрямую, но я очень хочу понять природу проблемы, так как было бы неплохо иметь более легкое решение.

Надеюсь, в будущем выпуске Android будет использоваться «местоположение по умолчанию на уровне ОС» для устройств, отличных от Geocoder, поэтому приложения, ориентированные на местоположение, работают из коробки на таких устройствах, как Google TV.

Я попросил Рето Мейера Google подтвердить, что моя теория верна, и он сказал: «Правильно. Геокодер является частью дополнения Google API, которое не является частью AOSP».

Таким образом, любое устройство, которое не поставляется с Play Маркет, приложениями GMail и т. Д., Также будет отсутствовать в исходном коде Geocoder.

По-видимому, существует еще одно возможное обходное решение этой проблемы , которое, к сожалению, отмечено как дублирующийся вопрос, и поэтому может быть упущено. По сути, перезагрузка устройства устраняет проблему. Примечание. Я назвал это «обходным путем», а не «решением». 🙁

Некоторые устройства не имеют поддержки для Geocoder, поэтому вам нужно создать собственный геокодер.

В основном вам нужно создать асинхронную задачу для запроса google для адреса и обработать ответ json.

Используя aquery, я делаю что-то вроде этого:

 public void asyncJson(String address){ address = address.replace(" ", "+"); String url = "http://maps.googleapis.com/maps/api/geocode/json?address="+ address +"&sensor=true"; aq.ajax(url, JSONObject.class, new AjaxCallback<JSONObject>() { @Override public void callback(String url, JSONObject json, AjaxStatus status) { if(json != null){ //here you work with the response json JSONArray results = json.getJSONArray("results"); Toast.makeText(context, results.getJSONObject(1).getString("formatted_address")); }else{ //ajax error, show error code Toast.makeText(aq.getContext(), "Error:" + status.getCode(), Toast.LENGTH_LONG).show(); } } }); } 

Для тех, кто ищет альтернативу, надеюсь, мой ответ в другом посте полезен. Вы можете использовать API геокодирования Google, когда поймали ошибку в геокодировании.

Для получения дополнительного кода => Получить текущее местоположение с помощью json

Я была такая же проблема. Я использовал следующую функцию.

Заметка:

Используйте context своей деятельности и не используйте getApplicationContext() для следующей функции

 public static Address getLocalityFrmGeoCoder(Context context, Location mLocation) { try { if(mLocation!=null){ Geocoder gCoder = new Geocoder(context, Locale.getDefault()); List<Address> address = gCoder.getFromLocation(mLocation.getLatitude(), mLocation.getLongitude(), 1); if (address.size() > 0) { return address.get(0); } } } catch (Exception e) { Log.d("GEOCODER", "GEOCODER EXCEPTION"); e.printStackTrace(); } return null; }