Gps для android java

Полный список

— получаем данные о местоположении

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 добавим строки:

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

В 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 (все ок, данные доступны). В этом методе мы просто выводим новый статус на экран.

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

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

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, Kotlin, RxJava, Dagger, Тестирование

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

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Простой способ добавить геолокацию в свой проект для Android

Долго я прочёсывал интернет в поисках простого решения, как мне в проект добавить 1 только класс и больше не беспокоиться о проблемах геолокации.
Критерии были такие:
1) решить всё в 1 классе, как можно меньше используя внешний код.
2) у пользователя должна быть всегда под рукой 1 static переменная в которой указанно его местоположение и больше ни о чём он знать не должен.

Большинство постов не отвечало на поставленный вопрос: конечно сначала нужно обратиться к сервису, потом нужно установить listner, потом вы можете посмотреть на трёхстраничный краткий пример как это делать.
В итоге я написал свой класс, с которым и хочу вас познакомить: он прост в использовании и с ним сможет справиться любой: просто добавьте его в проект и будет вам счастье.

Итак, что же здесь есть?

Класс разделен на 3 части:
1) imHere — переменная типа Location, в которой будет всегда доступна самая последняя информация о местоположении пользователя.
2) функция SetUpLocationListener — в любом случае нам нужна будет начальная установка для того, чтобы система начала сама без нашего участия выполнять обновление переменной imHere.
3) все остальные обязательные части LocationListener, которые можно переделать по собственному желанию.

Итак, как это работает?

1) создаем класс MyLocationListener
2) копируем в него код написанный выше
3) в основной функции (например MainActivity) ближе к началу запускаем:

или для любителей потоков

4) теперь у нас всегда и в любой части нашего проекта есть переменная MyLocationListener.imHere типа Location, в которой хранится самое последнее местоположение пользователя и множество дополнительной информации, как например скорость или точность определения местоположения.

И в заключение: это принципиальный код и тут есть что улучшать. Например нужно учитывать, что первое время локация может быть не определена и imHere будет null, но это всё не скоро: сейчас у нас есть класс, который позволяет нам без лишних усилий и с минимумом знаний добавить геолокацию в свой проект.

(!) Не забудьте: в зависимости от выбранного провайдера нужно добавить в манифест соответствующее разрешение. Например используемый выше GPS_PROVIDER требует добавления следующей строчки в манифест:

Источник

Android — Службы на основе местоположения

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

Читайте также:  Как максимально оптимизировать андроид

Это становится возможным с помощью сервисов Google Play , которые облегчают добавление информации о местоположении в ваше приложение с помощью автоматического отслеживания местоположения, геозон и распознавания активности.

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

Местоположение объекта

Объект Location представляет собой географическое местоположение, которое может состоять из широты, долготы, отметки времени и другой информации, такой как азимут, высота над уровнем моря и скорость. Существуют следующие важные методы, которые вы можете использовать с объектом Location для получения информации о местоположении —

float distanceTo (Место назначения)

Возвращает приблизительное расстояние в метрах между этим местоположением и заданным местоположением.

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

Получите высоту, если доступно, в метрах над уровнем моря.

Получить подшипник, в градусах.

Получите широту, в градусах.

Получите долготу в градусах.

Получите скорость, если она доступна, в метрах / секунду над землей.

Истинно, если это местоположение имеет точность.

Верно, если это местоположение имеет высоту.

логическое значение hasBearing ()

Истинно, если у этого местоположения есть отношение.

Верно, если это местоположение имеет скорость.

Очищает содержимое локации.

void setAccuracy (точность с плавающей точкой)

Установите расчетную точность этого местоположения, метров.

void setAltitude (двойная высота)

Установите высоту в метрах над уровнем моря.

void setBearing (поплавковый подшипник)

Установите подшипник в градусах.

void setLatitude (двойная широта)

Установите широту в градусах.

void setLongitude (двойная долгота)

Установите долготу в градусах.

void setSpeed ​​(скорость плавания)

Установите скорость в метрах / секунду над землей.

Возвращает строку, содержащую краткое, понятное человеку описание этого объекта.

float distanceTo (Место назначения)

Возвращает приблизительное расстояние в метрах между этим местоположением и заданным местоположением.

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

Получите высоту, если доступно, в метрах над уровнем моря.

Получить подшипник, в градусах.

Получите широту, в градусах.

Получите долготу в градусах.

Получите скорость, если она доступна, в метрах / секунду над землей.

Истинно, если это местоположение имеет точность.

Верно, если это местоположение имеет высоту.

логическое значение hasBearing ()

Истинно, если у этого местоположения есть отношение.

Верно, если это местоположение имеет скорость.

Очищает содержимое локации.

void setAccuracy (точность с плавающей точкой)

Установите расчетную точность этого местоположения, метров.

void setAltitude (двойная высота)

Установите высоту в метрах над уровнем моря.

void setBearing (поплавковый подшипник)

Установите подшипник в градусах.

void setLatitude (двойная широта)

Установите широту в градусах.

void setLongitude (двойная долгота)

Установите долготу в градусах.

void setSpeed ​​(скорость плавания)

Установите скорость в метрах / секунду над землей.

Возвращает строку, содержащую краткое, понятное человеку описание этого объекта.

Получить текущее местоположение

Чтобы получить текущее местоположение, создайте клиент местоположения, который является объектом LocationClient , подключите его к Location Services с помощью метода connect () , а затем вызовите его метод getLastLocation () . Этот метод возвращает самое последнее местоположение в форме объекта Location, который содержит координаты широты и долготы и другую информацию, как описано выше. Чтобы иметь функциональность на основе определения местоположения в вашей деятельности, вам нужно будет реализовать два интерфейса:

Эти интерфейсы предоставляют следующие важные методы обратного вызова, которые вам необходимо реализовать в своем классе деятельности —

Sr.No. Метод и описание
1

абстрактный void onConnected (Bundle connectionHint)

Этот метод обратного вызова вызывается, когда служба определения местоположения успешно подключена к клиенту определения местоположения. Вы будете использовать метод connect () для подключения к клиенту местоположения.

абстрактный void onDisconnected ()

Этот метод обратного вызова вызывается, когда клиент отключен. Вы будете использовать метод connect () для отключения от клиента местоположения.

абстрактный void onConnectionFailed (результат ConnectionResult)

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

абстрактный void onConnected (Bundle connectionHint)

Этот метод обратного вызова вызывается, когда служба определения местоположения успешно подключена к клиенту определения местоположения. Вы будете использовать метод connect () для подключения к клиенту местоположения.

абстрактный void onDisconnected ()

Этот метод обратного вызова вызывается, когда клиент отключен. Вы будете использовать метод connect () для отключения от клиента местоположения.

абстрактный void onConnectionFailed (результат ConnectionResult)

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

Вам следует создать клиент местоположения в методе onCreate () вашего класса активности, а затем подключить его в onStart () , чтобы службы определения местоположения поддерживали текущее местоположение, пока ваша активность полностью видна. Вы должны отключить клиент в методе onStop () , чтобы, когда ваше приложение не было видно, Location Services не поддерживал текущее местоположение. Это помогает в значительной степени сэкономить заряд батареи.

Получить обновленное местоположение

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

Sr.No. Методы и описание обратного вызова
1

абстрактный void onLocationChanged (расположение)

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

абстрактный void onLocationChanged (расположение)

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

Расположение Качество обслуживания

Объект LocationRequest используется для запроса качества обслуживания (QoS) для обновлений местоположения у LocationClient . Существуют следующие полезные методы установки, которые вы можете использовать для обработки QoS. Доступны эквивалентные методы получения, которые вы можете проверить в официальной документации Android.

Sr.No. Метод обратного вызова и описание
1

setExpirationDuration (длинный миллис)

Установите длительность этого запроса в миллисекундах.

setExpirationTime (длинный миллис)

Установите время истечения запроса в миллисекундах с момента загрузки.

setFastestInterval (длинный миллис)

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

setInterval (длинный миллис)

Установите желаемый интервал для активных обновлений местоположения в миллисекундах.

setNumUpdates (int numUpdates)

Установите количество обновлений местоположения.

setPriority (int priority)

Установите приоритет запроса.

setExpirationDuration (длинный миллис)

Установите длительность этого запроса в миллисекундах.

setExpirationTime (длинный миллис)

Установите время истечения запроса в миллисекундах с момента загрузки.

setFastestInterval (длинный миллис)

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

setInterval (длинный миллис)

Установите желаемый интервал для активных обновлений местоположения в миллисекундах.

setNumUpdates (int numUpdates)

Установите количество обновлений местоположения.

setPriority (int priority)

Установите приоритет запроса.

Теперь, например, если вашему приложению требуется местоположение с высокой точностью, оно должно создать запрос местоположения, для которого setPriority (int) имеет значение PRIORITY_HIGH_ACCURACY, а setInterval (long) — 5 секунд. Вы также можете использовать больший интервал и / или другие приоритеты, такие как PRIORITY_LOW_POWER, для запроса точности уровня «города» или PRIORITY_BALANCED_POWER_ACCURACY для точности уровня «блока».

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

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

Если у вас есть объект Location , вы можете использовать метод Geocoder.getFromLocation (), чтобы получить адрес для заданной широты и долготы. Этот метод является синхронным, и для его работы может потребоваться много времени, поэтому вам следует вызывать метод из метода doInBackground () класса AsyncTask .

AsyncTask должен быть разделен на подклассы для использования, и подкласс переопределит метод doInBackground (Params …) для выполнения задачи в фоновом режиме, а метод onPostExecute (Result) вызывается в потоке пользовательского интерфейса после завершения фонового вычисления и во время отобразить результат. В AyncTask есть еще один важный метод — execute (Params … params) , который выполняет задачу с указанными параметрами.

пример

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

Чтобы поэкспериментировать с этим примером, вам понадобится настоящее мобильное устройство с новейшей ОС Android, в противном случае вам придется бороться с эмулятором, который может не работать.

Создать приложение для Android

Sr.No. Метод и описание
1
шаг Описание
1 Вы будете использовать IDE Android Studio для создания приложения Android и назовите его как Tutorialspoint в пакете com.example.tutorialspoint7.myapplication .
2 добавьте файл src / GPSTracker.java и добавьте необходимый код.
3 Измените файл src / MainActivity.java и добавьте необходимый код, как показано ниже, чтобы получить текущее местоположение и его эквивалентный адрес.
4 Измените XML-файл макета res / layout / activity_main.xml, чтобы добавить все компоненты графического интерфейса, которые включают три кнопки и два текстовых представления для отображения местоположения / адреса.
5 Измените файл res / values ​​/ strings.xml, чтобы определить необходимые постоянные значения
6 Измените AndroidManifest.xml, как показано ниже
7 Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного основного файла активности MainActivity.java .

Ниже приводится содержание измененного основного файла активности GPSTracker.java .

Ниже будет содержание файла res / layout / activity_main.xml

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

Давайте попробуем запустить ваше приложение Tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Перед запуском приложения установщик Android-студии отобразит следующее окно, чтобы выбрать вариант, в котором вы хотите запустить приложение Android.

Теперь, чтобы увидеть местоположение, выберите Get Location Button, которая будет отображать информацию о местоположении следующим образом:

Источник

Читайте также:  Как прошить кастомную прошивку android
Оцените статью