Поставщики местоположения Android - GPS или сетевой поставщик? - PullRequest
114 голосов
/ 21 июля 2011

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

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

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

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

Ответы [ 3 ]

255 голосов
/ 21 июля 2011

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

Это:

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

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

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

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

enter image description here

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

Код ссылки: https://stackoverflow.com/a/3145655/28557

----------------------- Обновление -----------------------

Теперь Android есть Поставщик объединенных локаций

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

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

  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

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

7 голосов
/ 21 июля 2011

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

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

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

3 голосов
/ 07 февраля 2017

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

...