Провайдеры местоположения Android - провайдер GPS или сети?

128

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

  1. Существуют разные поставщики геолокации, какой из них наиболее точный? GPS Provider или провайдер сети ?

  2. Чем отличаются эти доступные провайдеры? Как они функционируют?

  3. Не могли бы вы предоставить мне несколько фрагментов кода или руководств о том, как начать реализацию функций GPS в моем приложении?

Noman
источник
18
Проголосуйте за повторное открытие - вопрос правильный, а предоставленный ответ полезен. Ответ также устарел, так как теперь есть провайдер Fused Location - открытие вопроса позволит обновить его.
Ричард Ле Мезурье

Ответы:

282

В Android есть 3 провайдера местоположения.

Они есть:

gps -> (GPS, AGPS): имя поставщика местоположения GPS. Этот провайдер определяет местоположение по спутникам. В зависимости от условий этому поставщику может потребоваться время, чтобы вернуть исправление местоположения. Требуется разрешение android.permission.ACCESS_FINE_LOCATION.

сеть -> (AGPS, CellID, WiFi MACID): имя провайдера сетевого местоположения. Этот провайдер определяет местоположение в зависимости от наличия вышек сотовой связи и точек доступа Wi-Fi. Результаты извлекаются посредством поиска в сети. Требуется одно из разрешений android.permission.ACCESS_COARSE_LOCATION или android.permission.ACCESS_FINE_LOCATION.

пассивный -> (CellID, WiFi MACID): специальный провайдер местоположения для получения местоположений без фактического запуска исправления местоположения. Этот поставщик может использоваться для пассивного получения обновлений местоположения, когда их запрашивают другие приложения или службы, без фактического запроса местоположения самостоятельно. Этот провайдер будет возвращать местоположения, созданные другими провайдерами. Требуется разрешение android.permission.ACCESS_FINE_LOCATION, хотя, если GPS не включен, этот провайдер может возвращать только грубые исправления. Это то, что Android называет этими поставщиками местоположения, однако базовые технологии, обеспечивающие работу этого материала, сопоставляются с конкретным набором аппаратных средств и возможностей, предоставляемых телекоммуникационной компанией (сетевой сервис).

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

введите описание изображения здесь

Ссылка на статью: Провайдеры местоположения Android - GPS, сети, пассивные Авторы Назмул Идрис

Ссылка на код: https://stackoverflow.com/a/3145655/28557

-----------------------Обновить-----------------------

Теперь у Android есть провайдер местоположения Fused

Fused Location Provider интеллектуально управляет базовой технологией определения местоположения и предоставляет вам наилучшее местоположение в соответствии с вашими потребностями. Это упрощает для приложений способы определения текущего местоположения пользователя с повышенной точностью и меньшим энергопотреблением.

Провайдер Fused Location предоставляет три способа получения местоположения

  1. Последнее местоположение: используйте, если вы хотите узнать текущее местоположение один раз.
  2. Запрос местоположения с помощью прослушивателя: используйте, когда приложение находится на экране / во внешнем интерфейсе и требует продолжения определения местоположения.
  3. Запрос местоположения с использованием ожидающего намерения: используется, когда приложение работает в фоновом режиме и требует продолжения определения местоположения.

Ссылки :

Официальный сайт: http://developer.android.com/google/play-services/location.html

Пример объединенного провайдера местоположения: GIT: https://github.com/kpbird/fused-location-provider-example

http://blog.lemberg.co.uk/fused-location-provider

-------------------------------------------------- ------

Винаяк Бевинакатти
источник
2
Обратите внимание, что есть также провайдер Google Play Services Fused Locator, который можно использовать.
Ричард Ле Мезурье
Можно ли создать собственного поставщика услуг определения местоположения? android.permission.INSTALL_LOCATION_PROVIDER подписан или система означает, что я должен иметь возможность установить его на корневом устройстве, нет?
JohnyTex
1
Поставщик объединенного местоположения доступен только для API> = 19. Нам все еще нужно следовать старой процедуре для устройства, на котором работают более старые версии, верно?
Shobhit Puri
есть ли какой-либо образец кода / существующий API, который ищет местоположение GPS и через некоторое время обращается к провайдеру сети, если GPS не может определить местоположение? или это должно обрабатываться в коде какой-то логикой таймера?
jrhamza
Пассивный провайдер "" "Этот провайдер может использоваться для пассивного получения обновлений местоположения, когда их запрашивают другие приложения или службы, без фактического запроса местоположения самостоятельно." ""
nurisezgin
7

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

Хорошим началом может быть посещение сайта разработчиков Android. У них был раздел, посвященный определению местоположения пользователя, и в нем есть все необходимые вам образцы кода.

http://developer.android.com/guide/topics/location/obtaining-user-location.html

Otra
источник
@Noman, вы хотите узнать долготу и широту вашего местоположения?
Nikunj Patel
@Scorpio Я действительно хотел знать, какой вариант лучше среди СЕТЕВОГО ПРОВАЙДЕРА и GPS-ПРОВАЙДЕРА. , .Отра отправьте мне ссылку в качестве ответа на мой вопрос, который мне очень помог ... теперь я использую NETWORK PROVIDER в своем приложении :-)
Noman
3

Здесь есть несколько отличных ответов. Другой подход, который вы могли бы использовать, - это использовать некоторые бесплатные SDK, доступные в Интернете, такие как Atooma, tranql и Neura, которые можно интегрировать с вашим Android-приложением (интеграция занимает менее 20 минут). Наряду с предоставлением вам точного местоположения вашего пользователя, он также может дать вам хорошее представление о действиях вашего пользователя. Кроме того, некоторые из них потребляют менее 1% заряда батареи.

johndaly
источник
1
Могу я получить ссылки на SDK, о котором вы говорите?
Кишор Реланги