Геокодер не работает на некоторых телефонах Android

Я работаю над приложением для Android, которое позволяет пользователю вводить адрес и преобразовывать его в широту и долготу для дальнейшего использования. Я использую следующий код, чтобы получить lat и long

          addresses = geocoder.getFromLocationName("11381 zapata ave san diego", 1);

        if (addresses.size() > 0) {
            double latitude = addresses.get(0).getLatitude();
            double longitude = addresses.get(0).getLongitude();

            addGeoFence(latitude, longitude);
            tlFragmentMap.setLatLong(new LatLng(latitude, longitude));
            return true;
        } else {
            return false;
        }

Этот геокодер отлично работает только на некоторых телефонах. Может ли кто-нибудь предложить мне способ заставить его работать на всех телефонах. Я не хочу использовать какой-либо API. Моя версия Compile SDK — 22, minSdkVERsion — 14, а targetSdkVersion — 22.


person Akshay    schedule 30.06.2015    source источник
comment
Можете ли вы дать больше информации, какие телефоны работают хорошо, какие телефоны не работают?   -  person Omar HossamEldin    schedule 30.06.2015
comment
@3amoura Это работало на Samsung Galaxy S4 с Android 5.0.1 и не работало на очень крутой модели SL5000 с Android 4.4.2.   -  person Akshay    schedule 30.06.2015
comment
Вы можете сначала получить стандартный адрес, используя locationAddress.getAddressFromLocation(address, getApplicationContext(), new GeocoderHandler());, а затем использовать geocoder.getFromLocationName. Подробнее см. здесь.   -  person bjiang    schedule 01.07.2015
comment
@bjiang У меня до этого места не было. Пользователь вводит адрес, и я использую его.   -  person Akshay    schedule 01.07.2015
comment
@bjiang Это работает все время. Я слышал, что геокодер Android работает нормально только до API 16. После этого он попал или промахнулся. Я прав?   -  person Akshay    schedule 01.07.2015
comment
Я устал от этого после API 16, и он отлично работал, вы можете попробовать сами:)   -  person bjiang    schedule 01.07.2015
comment
@bjiang Хорошо. Я попробую на обоих телефонах, которые у меня есть   -  person Akshay    schedule 01.07.2015
comment
Что вы имеете в виду под не сработало. Это вызвало исключение или просто вернуло 0 результатов?   -  person AndrewR    schedule 06.10.2017


Ответы (1)


Используйте метод Geocoder isPresent(), чтобы определить, присутствует ли он на текущем устройстве (эта служба не представлена ​​в основной структуре).

Дополнительную информацию можно найти в официальной документации.

В качестве запасного (или может быть единственного, поскольку оно гарантированно работает на всех устройствах) решения можно использовать API для геокодирования

person Nikita Barishok    schedule 06.05.2017