Использование геолокации в приложениях под Android | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 мая, печатный экземпляр отправим 8 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №9 (68) июнь-2 2014 г.

Дата публикации: 14.06.2014

Статья просмотрена: 3971 раз

Библиографическое описание:

Бутенко, В. В. Использование геолокации в приложениях под Android / В. В. Бутенко. — Текст : непосредственный // Молодой ученый. — 2014. — № 9 (68). — С. 12-14. — URL: https://moluch.ru/archive/68/11691/ (дата обращения: 26.04.2024).

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

Ключевые слова:Android, геолокация, программирование.

Устройства на Android позволяют получить данные о текущем местоположении. Добавить геолокацию в проект возможно при применение Google Maps Android API и классов пакета android.location.

Первый вариант использует сервера Google Maps и даёт возможность добавить карты в приложение с помощью MapView, отображающего карту с данными, полученными от службы Google Maps.

Второй вариант использует системную службу LocationManager. И именно этот вариант будет описан далее.

Классы пакета android.location

Android даёт доступ к службе для определения местоположения, поддерживаемую устройством через классы пакета android.location.

Всего в пакет входит 9 классов:

1)      Address представляет собой набор строк, описывающих местоположение, является упрощённой версией xAL (eXtensible Address Language). С использованием этого класса возможно получить такие данные, как номер телефона, почтовый индекс, город, страну, код страны, улицу, номер дома и т.д.

2)      Criteria позволяет задать границы для работы с провайдером. Например, должен ли он возвращать информацию о широте и долготе, точность этих данных и прочее.

3)      Класс Geocoder для прямого геокодирования и обратного. Трансформирует адрес или другую информацию о местоположении в широту и долготу и наоборот.

4)      GpsSatellite предоставляет информацию о текущём состоянии спутника (высоту, азимут, отношение сигнал / помеха).

5)      GpsStatus возвращает максимальное количество спутников, их список и время для получения последнего исправления с момента перезапуска GPS.

6)      Location даёт доступ к данным о географическом местоположении (широта, долгота, время определения координат, точность, скорость, пеленг и т.д.).

7)      LocationManager предоставляет права на пользование одноимённой системной службой. Та, в свою очередь, – права на использование трёх провайдеров: GPS_PROVIDER, NETWORK_PROVIDER и PASSIVE_PROVIDER. GPS_PROVIDER – это данные с GPS спутников. NETWORK_PROVIDER – координаты, которые можно получить через сотовую связь или WiFi.  PASSIVE_PROVIDER возвращает данные, когда кто-то в системе пытается определить местоположение через GPS или NETWORK провайдеров.

8)      LocationProvider – абстрактынй класс для провайдеров. Каждый провайдер имеет набор требований, при которых он может быть использован, например, количество спутников, GPS оборудование, доступ к сети конкретного оператора и прочее. При использовании методов этого класса возможно получить все эти требования.

9)      SettingInjectorService динамически формирует резюме и активирует статус предпочтений введённых в списке настроек приложений. Настройки геолокации, которые применяются в приложении, должны быть показаны в рамках только этого приложения.

Добавляем геолокацию в проект

Чтобы получать информацию о местонахождении, в файле AndroidManifest.xml необходимо прописать соответствующее разрешение. В нашем случае, это ACCESS_FINE_LOCATION, т.к. это разрешение позволяет использовать оба провайдера. Когда ACCESS_COARSE_LOCATION даёт разрешение только NETWORK провайдеру.

Создаём класс и добавляем ему слушателя LocationListener. Описываем в этом классе одноимённый метод принимающий два параметра: тип провайдера и контекст (Листинг 1).

public class ActivateLocation implements LocationListener {

private Location location;

private LocationManager locationManager;

public static final int GPS = 0; /** LocationManager.GPS_PROVIDER **/

public static final int NETWORK = 1; /** LocationManager.NETWORK_PROVIDER **/

public static final int PASSIVE = 2; /** LocationManager.PASSIVE_PROVIDER **/

/**

* Register location listener.

* @param context

* @param PROVIDER GPS, NETWORK or PASSIVE.

*/

public ActivateLocation(int PROVIDER, Context context) {

locationManager = context.getSystemService(Context.LOCATION_SERVICE);

switch (PROVIDER) {

case GPS: {

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

break;

}

case NETWORK: {

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,

0, 0, this);

location = locationManager.getLastKnownLocation(

LocationManager.NETWORK_PROVIDER);

break;

}

case PASSIVE: {

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER,

0, 0, this);

location = locationManager.getLastKnownLocation(LocationManager.

PASSIVE_PROVIDER);

break;

}

}

}

Листинг 1. Присвоение слушателя

Наиболее точные данные приходят от GPS провайдера, но они приходят с задержкой, и заряд аккумулятора расходуется быстрее. NETWORK провайдер возвращает менее точные данные чем GPS, но данные приходят быстрее и заряд аккумулятора расходуется медленнее.

Добавляем возможность удалить слушателя и получать данные вызовом метода getLocation() (Листинг 2).

/**

* Unregister location listener.

*/

public void unregisterLocationListener(){ locationManager.removeUpdates(this); };

/**

* Return location.

*/

public Location getLocation(){ return location; };

@Override

public void onLocationChanged(Location loc) {

location = loc;

}

@Override

public void onStatusChanged(String s, int i, Bundle bundle) { }

@Override

public void onProviderEnabled(String s) { }

@Override

public void onProviderDisabled(String s) { }

Листинг 2. Продолжение класса ActivateLocation

Интерфейс LocationListener позволяет описать следующие методы: onLocationChanged, onProviderDisabled, onProviderEnabled и onStatusChanged.

onStatusChanged возвращает статус провайдера.

onProviderEnabled и onProviderDisabled вызываются когда провайдер был включен или выключен пользователем.

onLocationChanged возвращает данные о местоположении.

Используем только последний метод. К глобальной переменной location приравниваем последнюю информацию о местоположении. И значение этой переменной возвращаем в методе getLocation(). Таким образом самые последнии данные будут доступны пользователю.

Создание экземпляра класса ActivateLocation

Использование класса ActivateLocation, позволяет добавить геолокацию в проект. Метод getLocation() вернёт последнее местоположение пользователя и множество дополнительной информации (точность, скорость, время, пеленг и т.д.) (Листинг 3).

ActivateLocation  aloc = new ActivateLocation(ActivateLocation.GPS, this);

Location location = aloc.getLocation();

Листинг 3. Получение данных о местоположении через класс ActivateLocation.

Создавать экземпляр класса ActivateLocation, т.е. регистрировать слушателя, лучше в onResume() и в onPause() удалять слушателя вызовом метода aLoc.unregisterLocationListener(). Тогда, Activity находясь в состоянии, когда его не видно пользователю, не будет взаимодействовать со службой LocationManager (получать данные от провайдера) и, соответственно, не будет тратить ресурсы (заряд аккумулятора).

Заключение

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

Литература:

1.      Android Developers. Location and Maps. [Электронный ресурс]. URL: http://developer.android.com/guide/topics/location/index.html#maps (21.05.2014).

2.      Android Developers. Google Play services. [Электронный ресурс]. URL: http://developer.android.com/google/play-services/maps.html (21.05.2014).

3.      Android Developers. Location Strategies. [Электронный ресурс]. URL: http://developer.android.com/guide/topics/location/strategies.html (21.05.2014).

4.      Android Developers. Location. [Электронный ресурс]. URL: http://developer.android.com/reference/android/location/package-summary.html (21.05.2014).

Основные термины (генерируются автоматически): GPS, NETWORK, PASSIVE, PROVIDER, данные, провайдер, заряд аккумулятора, класс, API, вызов метода.


Ключевые слова

программирование, Android, геолокация

Похожие статьи

Разработка мобильного приложения для таксатора

Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite [2]. Такой подход уменьшает накладные

- синхронизация данных с геосервером в реальном времени; - функции расчета для некоторых методов промышленной таксации лесосек.

Современные технологии управления фоновыми потоками...

Android API предоставляет несколько инструментов организации такого взаимодействия

По окончании потока данных Observable завершит свою работу, уведомляя соответствующим вызовом метода подписчика.

Анализ работы подсистемы мониторинга транспорта...

Вызов метода setPosition() периодически по

Недостатком данного метода является сильный расход заряда аккумулятора устройства и большие погрешности GPS-координат, в

Основные термины (генерируются автоматически): GPS, баз данных, JSON, REST, геозон, диспетчерская...

Система управления устройствами «умного дома»...

В статье рассматривается метод распознавания речи на основе облачного сервиса, производится фильтрация исходных данных, производится исследование применимости

2) Наличие программного интерфейса приложения(API); 3) Наличие бесплатной версии

Навигационные системы в логистике | Статья в журнале...

 спутниковый мониторинг, GPS-слежение и контроль находящегося «на линии» транспорта с сохранением в базу данных необходимых параметров: эффективный (с заказом) и «холостой» (без заказа)

 автоматический поиск ближайших к адресу вызова транспортных средств

Проектирование мобильных приложений и облачных сервисов

Шаблоны проектирования решают целые классы проблем проектирования

системы и программ (APIApplication Program Interface), принципиальных различий в архитектуре

 Наличие датчиков gps, гироскопа, акселерометра и других, позволяющих использовать...

Современные подходы к разработке мобильных приложений для...

‒ Совершать вызовы к API из потока отличного от основного (main thread). ‒ Обрабатывать полученные данные и помещать их в локальное

Для этого нужно подписаться на новый поток при помощи метода subscribeOn() и передать в него параметр Schedulers.newThread().

Сетевая технология SDN (обзор, современные тенденции)

The article is devoted to the analysis of the features of modern SDN network technology.

Необходимы новые подходы к развитию бизнеса операторов и сервис-провайдеров.

В то же время работа с большими объемами данных, современные вызовы рынка, а также...

Похожие статьи

Разработка мобильного приложения для таксатора

Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite [2]. Такой подход уменьшает накладные

- синхронизация данных с геосервером в реальном времени; - функции расчета для некоторых методов промышленной таксации лесосек.

Современные технологии управления фоновыми потоками...

Android API предоставляет несколько инструментов организации такого взаимодействия

По окончании потока данных Observable завершит свою работу, уведомляя соответствующим вызовом метода подписчика.

Анализ работы подсистемы мониторинга транспорта...

Вызов метода setPosition() периодически по

Недостатком данного метода является сильный расход заряда аккумулятора устройства и большие погрешности GPS-координат, в

Основные термины (генерируются автоматически): GPS, баз данных, JSON, REST, геозон, диспетчерская...

Система управления устройствами «умного дома»...

В статье рассматривается метод распознавания речи на основе облачного сервиса, производится фильтрация исходных данных, производится исследование применимости

2) Наличие программного интерфейса приложения(API); 3) Наличие бесплатной версии

Навигационные системы в логистике | Статья в журнале...

 спутниковый мониторинг, GPS-слежение и контроль находящегося «на линии» транспорта с сохранением в базу данных необходимых параметров: эффективный (с заказом) и «холостой» (без заказа)

 автоматический поиск ближайших к адресу вызова транспортных средств

Проектирование мобильных приложений и облачных сервисов

Шаблоны проектирования решают целые классы проблем проектирования

системы и программ (APIApplication Program Interface), принципиальных различий в архитектуре

 Наличие датчиков gps, гироскопа, акселерометра и других, позволяющих использовать...

Современные подходы к разработке мобильных приложений для...

‒ Совершать вызовы к API из потока отличного от основного (main thread). ‒ Обрабатывать полученные данные и помещать их в локальное

Для этого нужно подписаться на новый поток при помощи метода subscribeOn() и передать в него параметр Schedulers.newThread().

Сетевая технология SDN (обзор, современные тенденции)

The article is devoted to the analysis of the features of modern SDN network technology.

Необходимы новые подходы к развитию бизнеса операторов и сервис-провайдеров.

В то же время работа с большими объемами данных, современные вызовы рынка, а также...

Задать вопрос