Служба определения местоположения — еще одна ключевая функция, которая используется мобильными приложениями. Информационные технологии часто объединяются с картами, чтобы обеспечить хороший пользовательский опыт. Мы уже видели, как использовать внешний API Карт Google в учебной части 14 . Здесь я буду опираться на то же самое, чтобы показать, как изменения местоположения могут отображаться на карте.
Услуги определения местоположения предоставляются в пакете android.location.
Чтобы использовать службы определения местоположения, наша деятельность должна реализовывать интерфейс LocationManager.
Что обеспечивает LocationManager?
Именно через этот интерфейс приложение может получить доступ к службам определения местоположения системы. Эти сервисы в основном позволяют приложению получать периодические обновления географического местоположения устройства. Это также помогает в достижении конкретных целей приложения, когда устройство находится в непосредственной близости от указанного места.
Поскольку в моем примере я хочу смоделировать изменение местоположения и заставить мою деятельность реагировать на то же самое, я реализую этот интерфейс.
Чтобы сделать его эффективным приложением, я указал свое местоположение (жестко запрограммировано) на карте Google. Затем я использовал менеджер местоположения для обработки любых изменений местоположения. Изменение местоположения должно быть смоделировано на эмуляторе с помощью подключения через telnet. Как смоделировать изменение местоположения дано в конце этого урока.
Теперь погрузитесь в код.
ПРИМЕЧАНИЕ. Я добавляю реализацию LocationManager к тому же классу MapActivity, который был создан в предыдущем уроке ( часть 14 ), и поэтому здесь я не буду объяснять ничего, связанного с API карт.
Шаг 1.
Получите экземпляр LocationManager:
Получите экземпляр LocationManager:
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);
После получения диспетчера местоположений я устанавливаю поставщика GPS по умолчанию и запрашиваю уведомление, если местоположение изменяется более чем на 500 метров от текущего местоположения, частота обновления составляет 1 сек.
Шаг 2.
Переопределите метод onLocationChanged (), чтобы реагировать на изменения в расположении.
Переопределите метод 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
o localhost 5554
Это подключает клиент telnet к эмулятору Android (при условии, что эмулятор работает локально, прослушивая порт 5554. В противном случае это подключение не выполняется)
Сейчас типа
geo fix 79.000000 13.000000
(или ваша широта и долгота)
(или ваша широта и долгота)
Это отправляет сигнал об изменении местоположения в эмулятор.