Геокодирование вашего местоположения найдено Android затмение - PullRequest
0 голосов
/ 11 апреля 2011

Мой код в настоящее время отображает местоположение пользователей на карте ... используя код ниже

private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();

    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            controller.setZoom(8);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}

Я хочу использовать текущее местоположение пользователя и выполнить геокодирование для него, чтобы отобразить адрес в виде сообщения-тоста. Должен ли я удалить приведенный выше код и получить местоположение по отдельным значениям долготы и широты? Желательно, чтобы я не хотел менять код выше, так как он уже работает. Кажется, я не могу найти хороших учебников там. Может кто-нибудь, пожалуйста, направьте меня к одному? Спасибо

1 Ответ

0 голосов
/ 11 апреля 2011
  1. Поскольку MyLocationOverlay уже реализует LocationListener, вы можете просто создать его подкласс и переопределить метод прослушивателя onLocationChanged и выполнить там геокодирование (желательно в новой задаче потока / асинхронности, чтобы избежать блокировкиобработка оверлеев!).

    Что-то вроде:

    private void initMyLocation() {
        final MyLocationOverlay overlay = new MyLocationOverlay(this, map){
            public void onLocationChanged(android.location.Location location)
            {
                //subclass AsyncTask to take a location parameter for 
                //doInBackground where it geocodes and then passes a String
                //to onPostExecute where you can display a toast
                new MyAsyncTask().execute(location);
    
                //remember to call the parent implementation to avoid breaking
                //MyLocationOverlay default functionality
                super.onLocationChanged(location);
            }
        };
        overlay.enableMyLocation();
    
        overlay.runOnFirstFix(new Runnable() {
            public void run() {
                controller.setZoom(8);
                controller.animateTo(overlay.getMyLocation());
            }
        });
        map.getOverlays().add(overlay);
    }
    
  2. Другим вариантом может быть написание пользовательского LocationListener и регистрация обновлений для местоположения и выполнение довольнопочти то же самое, что и в коде выше.ИМО, это, вероятно, избыточно и неоправданно дорого, так как, как объяснялось выше, у вас уже есть реализация LocationListener, которую можно подключить, так зачем писать другую?

...