135

在我的应用程序中,我想确定用户的当前位置。但是,在这方面我确实有几个问题:

  1. 有不同的位置提供者,哪一个是最准确的?GPS 提供商还是网络提供商?

  2. 这些可用的提供者在多大程度上不同?它们是如何运作的?

  3. 您能否为我提供一些关于如何开始在我的应用程序中实现 GPS 功能的代码片段或教程?

4

3 回答 3

288

Android 中有 3 个位置提供程序。

他们是:

gps –> (GPS, AGPS): GPS 位置提供者的名称。该提供商使用卫星确定位置。根据条件,此提供程序可能需要一段时间才能返回位置修复。需要权限 android.permission.ACCESS_FINE_LOCATION。

network –> (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”,并根据任务在提供程序之间切换。这涵盖了所有情况,并提供最低公分母服务(在最坏的情况下)和优质的服务(在最好的情况下)。

在此处输入图像描述

文章参考:Android Location Providers - gps、network、passive 作者 Nazmul Idris

代码参考: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

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

于 2011-07-21T11:43:28.807 回答
7

GPS 通常比网络更准确,但有时 GPS 不可用,因此您可能需要在两者之间切换。

一个好的开始可能是查看 android 开发网站。他们有一个专门用于确定用户位置的部分,其中包含您需要的所有代码示例。

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

于 2011-07-21T11:27:15.593 回答
4

这里提到了一些很棒的答案。您可以采取的另一种方法是使用一些在线提供的免费 SDK,例如 Atooma、tranql 和 Neura,它们可以与您的 Android 应用程序集成(集成时间不到 20 分钟)。除了为您提供用户的准确位置外,它还可以让您深入了解用户的活动。此外,其中一些消耗的电池电量不到 1%

于 2017-02-07T05:26:44.533 回答