Разве geocoder.getFromLocationName не работает на эмуляторах? - PullRequest
0 голосов
/ 22 февраля 2012

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

 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();

    }

}

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

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

С Документы :

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

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

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

0 голосов
/ 22 февраля 2012

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

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

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

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

...