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

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

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

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

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


person Noman    schedule 21.07.2011    source источник


Ответы (3)


В 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 Location Provider.

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

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

  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

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

person Vinayak Bevinakatti    schedule 21.07.2011
comment
Обратите внимание, что есть также провайдер Google Play Services Fused Locator, который можно использовать. - person Richard Le Mesurier; 21.02.2014
comment
Можно ли создать своего собственного поставщика услуг определения местоположения? android.permission.INSTALL_LOCATION_PROVIDER подписан или система означает, что я должен иметь возможность установить его на корневом устройстве, не так ли? - person JohnyTex; 09.05.2014
comment
Поставщик объединенного местоположения доступен только для API ›= 19. Нам все еще нужно следовать старой процедуре для устройства, на котором работают более старые версии, верно? - person Shobhit Puri; 13.11.2014
comment
есть ли какой-либо образец кода / существующий API, который ищет местоположение GPS и через некоторое время обращается к провайдеру сети, если GPS не может определить местоположение? или это должно обрабатываться в коде какой-то логикой таймера? - person jrhamza; 30.03.2015
comment
Пассивный провайдер. Этот провайдер можно использовать для пассивного получения обновлений местоположения, когда их запрашивают другие приложения или службы, без фактического запроса местоположения самостоятельно. - person nurisezgin; 08.08.2015
comment
обратите внимание, что для FusedLocationProvider требуется google-play, что является нарушением сделки при публикации в репозиториях, таких как fdroid. - person trooper; 01.09.2016

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

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

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

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

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

person johndaly    schedule 07.02.2017
comment
могу я получить ссылки на SDK, о котором вы говорите? - person Kishore Relangi; 18.10.2017