Статьи

Location Manager — Учебник для разработчиков Android

Служба определения местоположения — еще одна ключевая функция, которая используется мобильными приложениями. Информационные технологии часто объединяются с картами, чтобы обеспечить хороший пользовательский опыт. Мы уже видели, как использовать внешний API Карт Google в учебной части 14 . Здесь я буду опираться на то же самое, чтобы показать, как изменения местоположения могут отображаться на карте.
Услуги определения местоположения предоставляются в пакете android.location.


Чтобы использовать службы определения местоположения, наша деятельность должна реализовывать интерфейс LocationManager.

Что обеспечивает LocationManager?


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


Чтобы сделать его эффективным приложением, я указал свое местоположение (жестко запрограммировано) на карте Google. Затем я использовал менеджер местоположения для обработки любых изменений местоположения. Изменение местоположения должно быть смоделировано на эмуляторе с помощью подключения через telnet. Как смоделировать изменение местоположения дано в конце этого урока.


Теперь погрузитесь в код.


ПРИМЕЧАНИЕ. Я добавляю реализацию LocationManager к тому же классу MapActivity, который был создан в предыдущем уроке ( часть 14 ), и поэтому здесь я не буду объяснять ничего, связанного с API карт.


Шаг 1.
Получите экземпляр LocationManager:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);

После получения диспетчера местоположений я устанавливаю поставщика GPS по умолчанию и запрашиваю уведомление, если местоположение изменяется более чем на 500 метров от текущего местоположения, частота обновления составляет 1 сек.


Шаг 2.
Переопределите метод onLocationChanged (), чтобы реагировать на изменения в расположении.

      public void onLocationChanged(Location location) {
            if (location != null) {
                  double lat = location.getLatitude();
                  double lng = location.getLongitude();
                  String currentLocation = "The location is changed to Lat: " + lat + " Lng: " + lng;
                  myLoc.setText(currentLocation);
                  geoPoint = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);
                  myMC.animateTo(geoPoint);
            }
      }
Этот метод вызывается, когда мы меняем местоположение через подключение telnet к эмулятору, как описано в конце учебника. На основе отправленных настроек широты и долготы GeoPoint изменяется для отображения нового местоположения.


Вот и все. Я не переопределил ни один из других методов, предоставляемых locationManager. Полный код можно скачать здесь .


Как смоделировать изменение местоположения в эмуляторе?
Запустите Эмулятор из затмения
Запустите командную строку
Начать
телнет
Затем введите:
o localhost 5554
Это подключает клиент telnet к эмулятору Android (при условии, что эмулятор работает локально, прослушивая порт 5554. В противном случае это подключение не выполняется)
Сейчас типа

geo fix 79.000000 13.000000
(или ваша широта и долгота)

Это отправляет сигнал об изменении местоположения в эмулятор.