Главная » Разработка для Android » ГЕОЛОКАЦИЯ БЕЗ ИСПОЛЬЗОВАНИЯ КАРТ в Android приложении

0

 

Что делать, если вашей активности требуется доступ к геолокационной информации, но в этой активности отсутствует MapView? При использовании MapView Android значительно все упрощает, позволяя применять My LocationOverl ay. Но если вам все же не нужна карта, то все равно будет не слишком сложно получить геолокационную информацию. Код из этого раздела не входит в состав программы MJAndroid, но показывает, как можно получить геолокационную информацию, не пользуясь MapView.

Рассмотрим очень простое приложение, состоящее всего из одной активности. В этой программе актуальное местоположение отображается в поле TextView.

Файлы описания и компоновки

Ниже приведен файл описания этой программы – AndroidMani fest. xml. Мы создали данный файл, воспользовавшись Android SDK и входящим в его состав редактором описаний Android (Android Manifest Editor). В редакторе нам потребовалось внести в файл единственное изменение – добавить тег uses-permission для android, permission.ACCESS_FINE_LOCATION (в предпоследней строке файла). Нам всегда требуется такое право доступа, чтобы получать информацию о местоположении от нашего геолокационного поставщика, использующего систему GPS:

Мы использовали очень простой файл компоновки, в состав которого входит четыре TextView: по одной метке и по одному текстовому полю для значений широты и долготы:

Подключение к поставщику геолокации и получение обновлений

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

Процедура совершенно незамысловата. Рассмотрим пояснения к коду.

Соединение с LocationManager- при помощи getSystemService(Context.LOCATION_ SERVICE).

Запрашиваем LocationManager о том, где будет использоваться getLastKnownLoca -tionC’provider").

Получаем широту и долготу – эти значения возвращаются от Location и используются при необходимости.

Еще нам нужно получать периодические обновления геолокационной информации от LocationManager так, чтобы мы могли отслеживать собственное движение. Для этого необходимо добавить подпрограмму-слушатель (listener routine) и приказать LocationManager вызывать эту подпрограмму, когда появится обновление информации.

Приложение получает доступ к геолокационным обновлениям, поступающим от LocationManager, через класс Di spLocListener. Поэтому создадим экземпляр этого класса в методе onCreate нашей главной активности. Нам потребуется переопределить методы в классе DispLocListener, чтобы код соответствовал определению интерфейса LocationListener, но в нашем приложении работать с этим интерфейсом не придется, поэтому данные определения останутся пустыми. Вот полная реализация класса:

Наш метод onCreate создает экземпляр класса Di spLocListener и приказывает, чтобы LocationManager обновлял его при необходимости посредством requestLocationUpdates. Этот метод принимает четыре параметра.

String provider – указывает, какое местоположение использовать поставщику. В данном случае предполагается, что у нас доступна система GPS.

long minTime – минимальное время между обновлениями, указывается в миллисекундах. LocationManager будет делать обновления не чаще чем с таким интервалом. Здесь можно настроить приложение так, чтобы оно не слишком расходовало заряд батареи: чем чаще происходят обновления, тем больше тратится энергии.

float minDistance – минимальное расстояние в метрах, после преодоления которого инициируется обновление. LocationManager обновится лишь при условии, что с момента последнего обновления мы прошли минимум такое расстояние.

LocationListenerlіstenei- название метода слушателя, который следует вызывать при наличии обновлений. Слушатель – это только что созданный нами экземпляр DispLocListener.

Наконец, мы хотим добавить код методов onPause и onResume, чтобы отключать обновления местоположения, когда карта не отображается на экране устройства, и снова включать, когда карта появляется на экране:

Обновление эмулированной геолокации

При разработке и отладке приложения, подобного описанному в предыдущем разделе, мы, как правило, пользуемся эмулятором. Было бы неплохо (возможно, даже существенно), если бы мы могли обновлять текущую геолокацию, которую эмулятор использует при выполнении вашего кода. Такой поставщик имитируемой геолокации может быть очень сложен, но в Android предусмотрено несколько встроенных способов для обновления эмулированной геолокации:

географическая программа (део), встроенная в оболочку Android;

разовые обновления, выполняемые при помощи Dalvik Debug Monitor Server;

направление движения, последовательно обновляемое при помощи Dalvik Debug Monitor Server.

Рассмотрим эти компоненты.

Использование део для обновления геолокации

Утилита део встроена в образ Android, работающий в эмуляторе. Она обладает рядом возможностей, мы перечислим наиболее полезные из них.

Команду део fіх можно использовать для отправки Android геолокационной информации. Это делается путем подключения к консоли эмулированного устройства по протоколу Telnet. Затем LocationProvider будет использовать эти данные как актуальное местоположение:

део fіх принимает три параметра:

longi tude – долгота, указывается в десятичных дробях;

lat і tude – широта, также задается в десятичных дробях;

al ti tude – высота, указывается в метрах.

Использование DDMS для обновления геолокации

Мы обсуждали службу Dalvik Debug Monitor Service (DDMS). Здесь мы поговорим о двух функциях этого инструмента, связанных с обновлениями геолокации. Область Emulator Control (Управление эмулятором) на экране DDMS обеспечивает несколько способов управления работающим эмулятором. После переключения в режим DDMS (нажмите DDMS в верхнем правом углу окна программы Eclipse) должна открыться область Emulator Control (Управление эмулятором), которая отобразится в середине окна DDMS по левому краю (рис. 15.1). Возможно, потребуется немного прокрутить эту область, чтобы просмотреть все инструменты управления, связанные с Location Controls (Управление геолокационной информацией).

Рис. 15.1. Область Emulator Control (Управление эмулятором) в инструменте DDMS

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

Если выбрать вкладку GPX или KML, то можно будет загрузить файл в формате GPX или KML, описывающий путь (рис. 15.2). Здесь мы уже загрузили файл OR. kml, имеющийся на сайте этой книги. Он отслеживает путь поблизости от головного офиса издательства O’Reilly, расположенного в городе Севастополь, штат Калифорния.

Рис. 15.2. Эмулятор DDMS с обновлениями геолокационной информации в формате KML

Файлы путей в формате GPX можно создавать с помощью разнообразных навигационных программ с поддержкой GPS, а файлы KML – используя Google Earth и многие другие навигационные программы. Файл OR. kml был сгенерирован путем нанесения нескольких меток (placemark) и конкатенации их в единый файл. Вот фрагмент файла OR. kml:

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии