Google location manager что это

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

Реализация этого всего вполне проста. Мы вешаем слушателя на провайдера и получаем данные. На данный момент есть два провайдера: GPS и Network.

GPS – тут все понятно, это данные с GPS-спутников.

Network – это координаты, которые можно получить через сотовую связь или WiFi. Для этого провайдера нужен инет.

Напишем простое приложение, которое будет запрашивать и отображать координаты.

Project name: P1381_Location
Build Target: Android 2.3.3
Application name: Location
Package name: ru.startandroid.develop.p1381location
Create Activity: MainActivity

В strings.xml добавим строки:

GPS Network Location settings

Экран main.xml:

Несколько TextView, в которые мы будем выводить данные, и кнопка для открытия настроек местоположения.

Что скрывает Site Kit — новый плагин статистики от Google?

MainActivity.java:

В onCreate определяем TextView-компоненты и получаем LocationManager, через который и будем работать.

В onResume вешаем слушателя с помощью метода requestLocationUpdates. На вход передаем:

— тип провайдера: GPS_PROVIDER или NETWORK_PROVIDER
— минимальное время (в миллисекундах) между получением данных. Я укажу здесь 10 секунд, мне этого вполне хватит. Если хотите получать координаты без задержек – передавайте 0. Но учитывайте, что это только минимальное время. Реальное ожидание может быть дольше.
— минимальное расстояние (в метрах). Т.е. если ваше местоположение изменилось на указанное кол-во метров, то вам придут новые координаты.
— слушатель, объект locationListener, который рассмотрим ниже

Также здесь обновляем на экране инфу о включенности провайдеров.

В onPause отключаем слушателя методом removeUpdates.

locationListener – слушатель, реализует интерфейс LocationListener с методами:

onLocationChanged – новые данные о местоположении, объект Location. Здесь мы вызываем свой метод showLocation, который на экране отобразит данные о местоположении.

onProviderDisabled – указанный провайдер был отключен юзером. В этом методе вызываем свой метод checkEnabled, который на экране обновит текущие статусы провайдеров.

onProviderEnabled – указанный провайдер был включен юзером. Тут также вызываем checkEnabled. Далее методом getLastKnownLocation (он может вернуть null) запрашиваем последнее доступное местоположение от включенного провайдера и отображаем его. Оно может быть вполне актуальным, если вы до этого использовали какое-либо приложение с определением местоположения.

onStatusChanged – изменился статус указанного провайдера. В поле status могут быть значения OUT_OF_SERVICE (данные будут недоступны долгое время), TEMPORARILY_UNAVAILABLE (данные временно недоступны), AVAILABLE (все ок, данные доступны). В этом методе мы просто выводим новый статус на экран.

Как уничтожить бизнес через Google Maps | Перехват разговоров ФБР

Провайдеры включаются и отключаются в настройках системы. Тем самым, просто определяется доступен ли провайдер для получения от него координат. Чуть позже увидим, как можно отправить юзера в эти настройки. Программное включение/выключение провайдеров через стандартные методы недоступно.

Далее идут свои методы.

showLocation на вход берет Location, определяет его провайдера методом getProvider и отображает координаты в соответствующем текстовом поле.

formatLocation на вход берет Location, читает из него данные и форматирует из них строку. Какие данные он берет: getLatitude – широта, getLongitude – долгота, getTime – время определения.

checkEnabled определяет включены или выключены провайдеры методом isProviderEnabled и отображает эту инфу на экране.

Метод onClickLocationSettings срабатывает по нажатию кнопки Location settings и открывает настройки, чтобы пользователь мог включить или выключить провайдер. Для этого используется Intent с action = ACTION_LOCATION_SOURCE_SETTINGS.

Осталось в манифесте прописать разрешение на определение координат — ACCESS_FINE_LOCATION, которое позволит нам использовать и Network и GPS. Также существует разрешение ACCESS_COARSE_LOCATION, но оно дает доступ только к Network-провайдеру.

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

У меня на планшете сейчас выключен GPS, выключен WiFi, вставлена симка и выключен мобильный интернет.

Запускаю приложение и вижу такую картину:

GPS выключен, Network включен. Но инета нет, поэтому Network мне ничего не дает. Надо включить либо мобильный инет, либо WiFi.

Я включаю WiFi. Проходит секунд 15-20 и инфа с Network пошла

Видим широту, долготу и время.

Напомню, что мы ставили минимальную скорость обновления – 10 сек. Но у меня провайдер Network выдает данные не чаще, чем раз в минуту.

Теперь давайте включим GPS. Для этого мы специально повесили кнопку Location settings, которую надо будет нажать пользователю, чтобы перейти в настройки. Жмем кнопку.

Видим, что GPS выключен, а Network включен. Наше приложение показывало все верно.

Разумеется, GPS можно включать и выключать через быстрые настройки системы (справа сверху). Но не все пользователи об этом знают. А тут мы их точно направим.

Включаем GPS и жмем Назад, чтобы вернуться в приложение.

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

В итоге сигнал пойман и получен результат.

У GPS через какое-то время включился статус 2 (AVAILABLE).

А у Network тишина со статусом. Не знаю, нормально это или нет.

Если с GPS сигналом все ок, то каждые 10 сек вы будете получать инфу о вашем местоположении. Если убрать планшет от окна, получим плохой сигнал: данные могут приходить реже и статус у меня иногда меняется на 1 (TEMPORARILY_UNAVAILABLE).

Прочее

Есть еще третий тип провайдера — PASSIVE_PROVIDER. Сам по себе этот провайдер никакие данные не вернет. Но повесив на него слушателя, вы сможете получать данные о местоположении, когда кто-то еще в системе пытается определить местоположение через обычные провайдеры. Система будет дублировать результаты и вам.

Метод getAllProviders вернет вам список всех доступных провайдеров. Метод getProviders(boolean enabledOnly) вернет либо все, либо только включенные.

Объект Location кроме координат, времени и провайдера имеет еще несколько атрибутов, которые могут прийти и пустыми:

getAccuracy – точность показания в метрах

getAltitude – высота над уровнем моря в метрах

getSpeed – скорость движения в м/с

getBearing – насколько я понял, это угол, на который текущая траектория движения отклоняется от траектории на север. Он же азимут.

Местоположение можно протестировать и через AVD эмулятор. Для этого надо в Eclipse открыть DDMS (Window > Open Perspective > DDMS) и выбрать вкладку Emulator Control. Внизу будет вкладка Manual, на которой есть поля для ввода координат и кнопка отправки.

На следующем уроке:

— создаем приложение с картой
— настраиваем карту и обрабатываем ее события
— программно меняем положение камеры

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

Источник: startandroid.ru

Location Manager

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

Как использовать
Все, что вам нужно сделать, это добавить свое местоположение и выбрать способ передвижения, например, автомобиль, велосипед или пешком.
Добавьте несколько мест и открывайте приложение всякий раз, когда вы хотите посетить эти места.
Нажмите на добавленные места, чтобы узнать, как добраться до них и сколько времени потребуется на дорогу.

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

Последнее обновление
24 июл. 2022 г.
Инструменты

Безопасность данных

arrow_forward

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

Источник: play.google.com

Android
Место нахождения

report this ad

API Android Location используются в самых разных приложениях для различных целей, таких как поиск местоположения пользователя, уведомление о том, когда пользователь покинул общую область (Geofencing), и помочь интерпретировать активность пользователя (ходьба, работа, вождение и т. Д.).

Однако API-интерфейсы Android не являются единственным средством приобретения местоположения пользователя. Ниже приводятся примеры использования Android LocationManager и других распространенных библиотек местоположений.

замечания

Для создания приложений с поддержкой местоположения на Android существует два пути:

  • Исходный исходный код LocationManager Android
  • Google FusedLocationProviderApi , входящий в состав Google Play Services

LocationManager

Pros

  • Более гранулированный контроль
  • Доступно на всех устройствах
  • Часть платформы Android

Cons

  • Слив батареи — проблема, если ее не управляют должным образом
  • Требуется логика для переключения поставщиков местоположения, если устройство не может найти местоположение (например, плохой GPS внутри здания)

Характеристики

  • Приемник NMEA
  • Приемник состояния GPS
  • Слушайте изменения статуса поставщика (например, GPS отключается пользователем)
  • Список поставщиков для выбора источника местоположения

Провайдеры

GPS

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION
  • Обновления местоположения обычно поступают один раз в секунду, но в ситуациях, когда GPS не используется в течение некоторого времени, и A-GPS недоступен, для получения местоположения требуется несколько минут.
  • В тех случаях, когда затруднено четкое представление о небе, точки GPS не будут группироваться очень хорошо (точки места «прыгать»), и точность может вводить в заблуждение в определенных областях из-за эффекта « Городской каньон ».

сеть

  • Необходимые разрешения:
  • ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION
  • Обновления местоположения происходят реже, чем GPS
  • Обновления местоположения обычно не кластеризуются (точки места «прыгать»), и точность может варьироваться в зависимости от количества различных факторов (количество сигналов Wi-Fi, уровень сигнала, тип ячейки башни и т. Д.),

пассивный

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION
  • Не полагайтесь на это, чтобы постоянно обновлять его. Это пассивно слушает другие приложения, которые делают запросы на местоположение, и передает их обратно.
  • Не возвращает FagedLocationProviderApi сгенерированные точки, только базовые точки местоположения, используемые для их создания.

FusedLocationProviderApi

Pros

  • Предлагает меньше разряда аккумулятора «из коробки»
  • Обрабатывает плохой GPS-приемник
  • Получает обновления более регулярно

Cons

  • Менее детальный контроль над GPS
  • Может быть недоступен на всех устройствах или в некоторых странах
  • Требуется зависимость сторонней библиотеки

Характеристики

  • Хорошо управляемое использование поставщиков местоположения для оптимальной экономии тесто
  • Обычно генерирует более точные точки, а затем Network Location Provider
  • Более частые обновления библиотеки, позволяющие улучшить
  • Нет необходимости указывать, какой тип поставщика использовать

Приоритетные уровни местоположения

PRIORITY_HIGH_ACCURACY

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION для более точного местоположения или ACCESS_COARSE_LOCATION для менее точного местоположения
  • Если ACCESS_FINE_LOCATION не используется, это не будет использовать GPS для генерации обновлений местоположения, но все равно найдет довольно точную точку в правильных условиях.
  • Если ACCESS_FINE_LOCATION используется, он может или не может использовать GPS для создания точек местоположения, в зависимости от того, насколько точно он может отслеживать устройство в соответствии с условиями окружающей среды.
  • Хотя это может сообщать о более точном обновлении местоположения, чем другие настройки, оно все еще подвержено эффекту « Городской каньон ».

PRIORITY_BALANCED_POWER_ACCURACY

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION для более точного местоположения или ACCESS_COARSE_LOCATION для менее точного местоположения
  • Такие же заметки, как PRIORITY_HIGH_ACCURACY
  • Хотя это маловероятно, этот параметр может по-прежнему использовать GPS для создания местоположения.

PRIORITY_LOW_POWER

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
  • Вероятно, он не использует GPS, но пока не проверен.
  • Обновления обычно не очень точны
  • Обычно используется для обнаружения значительных изменений в местоположении

PRIORITY_NO_POWER

  • Необходимые разрешения:
  • ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
  • Функции почти идентичны с LocationManager PASSIVE_PROVIDER
  • PASSIVE_PROVIDER отчеты об обновлениях Служб Google Play, когда PASSIVE_PROVIDER сообщает о возвращенных базовых обновлениях местоположения

Поиск проблемы

OnLocationChanged () никогда не вызывается

Поскольку это, похоже, является общей проблемой при получении Android Locations, я изложу быстрый контрольный список общих исправлений:

  1. Проверьте свой манифест! Одна из наиболее распространенных проблем заключается в том, что правильные разрешения никогда не предоставлялись. Если вы используете GPS (с сетью или без нее), используйте use , иначе используйте , Для FuseLocationApi от Google требуется ACCESS_FINE_LOCATION .
  1. (Для Android 6+) Проверьте разрешения во время выполнения ! Проверьте и запросите разрешения! Если вам никогда не дадут разрешения, вы столкнетесь с аварийными ситуациями или, что еще хуже (если вы поймаете все исключения), вы ничего не увидите! Не имеет значения, предоставит ли пользователь разрешение в начале приложения, всегда проверяйте, есть ли у вас разрешения для всех вызовов. Пользователь может легко перейти к своим настройкам и отозвать их.
  1. Дважды проверьте свой код! Вы уверены, что проходите в правом слушателе? IntentService ли вы, что BroadcastReceiver или IntentService к вашему манифесту? Используете ли вы PendingIntent.getService() в классе BroadcastReceiver или getBroadcast() в классе IntentService ? Вы уверены, что не регистрируете своего слушателя где-то еще в своем коде сразу после запроса?
  1. Проверьте настройки устройства! Очевидно, убедитесь, что вы включили службы определения местоположения. введите описание изображения здесь Если вы используете сетевые службы, включили ли вы «Сканирование всегда доступно»? У вас установлен режим «Лучшее» («Высокая точность») или «Аккумуляторная батарея» (только для сети)? введите описание изображения здесь Если вы используете GPS, включили ли вы режим «Лучшее» («Высокая точность») или «Только устройство» в режиме местоположения? введите описание изображения здесь
  1. Дважды проверьте свой код! Да, это здесь дважды. Вы пытались использовать LocationListener вместо PendingIntent или наоборот, чтобы убедиться, что вы действительно реализовали LocationManager правильно? Вы уверены, что запрос местоположения не удаляется в какой-либо части жизненного цикла Activity или Service, который вы не ожидали?
  1. Проверьте свое окружение! Вы тестируете GPS на первом этаже здания в центре Сан-Франциско? Проверяете ли вы сетевые местоположения в середине нигде? Вы работаете в секретном подземном бункере, лишенном всех радиосигналов, удивляясь, почему ваше устройство не получает место? Всегда проверяйте свое окружение, пытаясь устранить проблемы с местоположением!

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

API с плавающим местоположением

Пример использования активности w / LocationRequest

Пример использования службы с ожиданием и трансляцией

ExampleActivity

Служба определения местоположения

ПРИМЕЧАНИЕ. Не забудьте зарегистрировать эту службу в манифесте!

LocationReceiver

ПРИМЕЧАНИЕ. Не забудьте зарегистрировать этот приемник в манифесте!

Запрос обновлений местоположения с помощью LocationManager

Как всегда, вы должны убедиться, что у вас есть необходимые разрешения.

Запрос обновлений местоположения в отдельном потоке с помощью LocationManager

Как всегда, вы должны убедиться, что у вас есть необходимые разрешения.

Зарегистрировать геозонность

Я создал GeoFenceObserversationService одноэлементный класс.

GeoFenceObserversationService.java :

AppConstant :

public static final String SHARED_PREFERENCES_NAME = PACKAGE_NAME + «.SHARED_PREFERENCES_NAME»; public static final String GEOFENCES_ADDED_KEY = PACKAGE_NAME + «.GEOFENCES_ADDED_KEY»; public static final String DETECTED_GEOFENCES = «detected_geofences»; public static final String DETECTED_BEACONS = «detected_beacons»; public static String getErrorString(Context context, int errorCode) < Resources mResources = context.getResources(); switch (errorCode) < case GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE: return mResources.getString(R.string.geofence_not_available); case GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES: return mResources.getString(R.string.geofence_too_many_geofences); case GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS: return mResources.getString(R.string.geofence_too_many_pending_intents); default: return mResources.getString(R.string.unknown_geofence_error); >>

Где я начал службу? Из класса приложения

  • startService(new Intent(getApplicationContext(),GeoFenceObserversationService.class));

Как я зарегистрировал Geofences?

  • GeoFenceObserversationService.getInstant().addGeofences();

Получить адрес из местоположения с помощью геокодирования

После того, как вы получили объект Location из FusedAPI , вы можете легко получить Address информацию от этого объекта.

private Address getCountryInfo(Location location) < Address address = null; Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault()); String errorMessage; Listaddresses = null; try < addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), // In this sample, get just a single address. 1); >catch (IOException ioException) < // Catch network or other I/O problems. errorMessage = «IOException>>» + ioException.getMessage(); > catch (IllegalArgumentException illegalArgumentException) < // Catch invalid latitude or longitude values. errorMessage = «IllegalArgumentException>>» + illegalArgumentException.getMessage(); > if (addresses != null !addresses.isEmpty()) < address = addresses.get(0); >return country; >

Получение обновлений местоположения в BroadcastReceiver

Сначала создайте класс BroadcastReceiver для обработки входящих обновлений местоположения:

Затем, когда вы подключаетесь к GoogleApiClient в обратном вызове onConnected:

Не забудьте удалить намерение обновления местоположения в соответствующем обратном вызове жизненного цикла:

Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow

Источник: learntutorials.net

Рейтинг
Загрузка ...