Geocoder.getFromLocationName не работает на эмуляторах?

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

 public class GetURL extends MapActivity {
Geocoder geocoder;
MapView mapView = null;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

       mapView = (MapView)findViewById(R.id.geoMap);
        mapView.setBuiltInZoomControls(true);


           int lat = (int)(30.334954*1000000);
            int lng = (int)(-81.5625*1000000);
        GeoPoint pt = new GeoPoint(lat,lng);
        mapView.getController().setZoom(10);
        mapView.getController().setCenter(pt);
        mapView.getController().animateTo(pt);

        geocoder = new Geocoder(this);

}

public void first_location(View arg0) {
    try {
          EditText loc = (EditText)findViewById(R.id.location);
            String locationName = loc.getText().toString();

            List<Address> addressList = 
                   geocoder.getFromLocationName(locationName, 5);
            if(addressList!=null && addressList.size()>0)
            {

                int lat = (int)(addressList.get(0).getLatitude()*1000000);
                int lng = (int)(addressList.get(0).getLongitude()*1000000);

                GeoPoint pt = new GeoPoint(lat,lng);
                mapView.getController().setZoom(15);
                mapView.getController().setCenter(pt);
                mapView.getController().animateTo(pt);
        }
    } catch (IOException e) {
        e.printStackTrace();

    }

}

person Aaron    schedule 22.02.2012    source источник


Ответы (2)


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

Из документов:

Для класса Geocoder требуется серверная служба, которая не включена в базовую платформу Android. Методы запроса Geocoder вернут пустой список, если на платформе нет серверной службы. Используйте метод isPresent(), чтобы определить, существует ли реализация Geocoder.

По моему опыту, вызов geocoder.isPresent() из эмулятора вернет false, а с реального телефона вернет true, если настоящий телефон произведен компанией, о которой вы слышали.

Если вам нужна служба обхода/резервного копирования, вы можете запросить API Карт Google через HTTP так же, как с веб-страницы. В этом ответе есть пример здесь.

person Steve Blackwell    schedule 22.02.2012

На какой версии API вы тестируете? Похоже, в более ранних версиях Android есть ошибка Геокодер работает в эмуляторе версии 1.6, но не работает в эмуляторе версии 2.2

Также убедитесь, что у вашего приложения есть разрешение INTERNET (я предполагаю, что оно есть, поскольку ваша карта показывает фрагменты карты)

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

Обратите внимание, что функция геокодирования доступна только на официальных устройствах Android, т. е. на устройствах с Market/Gmail/Maps и т. д. Таким образом, недорогое устройство Android без Android Market не сможет предоставить результаты геокодирования.

person Ollie C    schedule 22.02.2012