ОТВЕТ:
Сначала, если вы используете эмулятор, попробуйте установить "цель" для устройства AVD на один из "API Google" вместо базового "Android"SDK.Поэтому, если вы хотите настроить таргетинг на 2.3.3, используйте «Google API (Google Inc.) - API Level 10» и not «Android 2.3.3 - API Level 10».
ОБЩАЯ ИНФОРМАЦИЯ
Аддон API Google включает серверную часть реализацию службы (поиск "серверная часть геокодера"), которая обязательна для работы методов Geocoder.getFromLocation...
.
Классу Geocoder требуется бэкэнд-сервис, который не включен в базовую платформу Android
То естьпочему ваш AVD должен предназначаться для API Google, чтобы эти методы работали.Если это не сработает, попробуйте протестировать на реальном устройстве.Помимо возможной ошибки, причиной получения этого исключения является либо проблема с Интернетом / отсутствие соединения, либо, скорее всего, на этом устройстве нет службы backend .
Предположительно, большинствона устройствах, которые включают службы и приложения Google, такие как Карты и т. д., будет реализован бэкэнд.Я не знаю, насколько это точно.
Существует также метод, начинающийся с API9, Geocoder.isPresent()
, который будет возвращать значение true, если присутствует внутренняя реализация. Однако , я считаю, что это ненадежно, так как тестирование на Amazon Kindle Fire вернуло true, но при совершении вызова getFromLocationName()
я все равно получил IOException: Service Not Available
Кажется,Самый надежный способ определить, присутствует ли серверная часть, - это просто позвонить getFromLocation...
и посмотреть, является ли ваше поле addresses
1043 * или List
пусто.Существует некоторая двусмысленность в том, что эти методы могут также возвращать null
или пустой список, если просто совпадений не найдено .