Подключаемый модуль определения и обработки данных о местоположении мобильного устройства для платформы Android
Gradle-модуль для определения геопозиции устройства, включает в себя следующие функции:
- Получение последней доступной координаты (используя Fused Location Provider)
- Запрос текущих координат (не использует кэш, больше время ожидания, свежие данные)
- Подписка на обновление координат с заданным интервалом в минутах
Геолокационный модуль использует библиотеку «play-services-location», которая взаимодействует с сервисами Google Play (используется Fused Location Provider API). Также используется стандартный Android Location API и модуль поддерживается на мобильных устройствах без сервисов Google Play.
В файле settings.gradle
необходимо добавить следующую зависимость:
include ':geolocationmodule'
Для использования функций модуля необходимо создать экземпляр класса LocationSupplier, передав ему контекст.
LocationSupplier locationSupplier = new LocationSupplier(CurrCoordinatesActivity.this);
Объект класса LocationSupplier имеет следующие доступные методы, описанные в интерфейсе ILocationSupplier:
void getLastKnownLocation(ILocationCallback callback) throws LocationPermissionNotGrantedException;
locationSupplier.getLastKnownLocation(myCallback);
void requestCurrentLocation(ILocationCallback callback) throws LocationPermissionNotGrantedException, LocationProviderDisabledException,
AirplaneModeOnException, DeviceLocationDisabledException;
locationSupplier.requestCurrentLocation(myCallback);
Отменить запрос на получение текущих координат можно с помощью следующей функции:
void cancelCurrentLocationRequest();
void requestLocationUpdates(double intervalMin, ILocationCallback callback) throws LocationPermissionNotGrantedException, LocationProviderDisabledException,
IntervalValueOutOfRangeException, DeviceLocationDisabledException, AirplaneModeOnException;
locationSupplier.requestLocationUpdates(interval, myCallback);
Отменить запрос на обновление координат можно помощью следующей функции:
void stopLocationUpdates();
void setAccuracyPriority(AccuracyPriority accuracyPriority);
Метод позволяет задать режим определения координат, для текущего экземпляра класса "LocationSupplier". На вход принимается одно из допустимых значений в перечислении "AccuracyPriority": AccuracyPriority – перечисление, содержащее поддерживаемые в Fused Location Provider API уровни приоритета запросов на получение данных о местоположении. Приоритет задает желаемую точность результата и расход заряда батареи:
- PRIORITY_HIGH_ACCURACY – используется для запроса наиболее точных доступных данных о местоположении, требует наибольшего расхода заряда батареи мобильного устройства.
- PRIORITY_BALANCED_POWER_ACCURACY – используется для запроса данных о местоположении с точностью до квартала (около 100 метров), требует среднего расхода заряда батареи мобильного устройства.
- PRIORITY_LOW_POWER – используется для запроса данных о местоположении с точностью до города (около 10 километров), требует низкого расхода заряда батареи мобильного устройства. Значение по умолчанию - PRIORITY_HIGH_ACCURACY.
Для работы методов «getLastKnownLocation», «requestCurrentLocation» и «requestLocationUpdates» необходимо одно из следующих разрешений:
- ACCESS_FINE_LOCATION - позволяет приложению получать данные о точном местоположении устройства;
- ACCESS_COARSE_LOCATION - позволяет приложению получать данные о приблизительном местоположении устройства; В случае, если оба разрешения отсутствуют, эти методы вызывают исключение «LocationPermissionNotGrantedException».