在我的应用程序中,我想确定用户的当前位置。不过,我在这方面有几个问题:
有不同的位置提供商,哪一个最准确? GPS Provider或Network Provider?
这些可用的提供商有多远?它们如何运作?
您能否提供一些代码片段或教程,介绍如何开始在我的应用程序中实现GPS功能?
答案 0 :(得分:253)
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”,并根据任务,切换 供应商。这包括所有情况,并提供最低的常见 分母服务(在最坏的情况下)和优质的服务(最好的 情况)。强>
文章参考:Android Location Providers - gps, network, passive By Fernando Cejas
代码参考:https://stackoverflow.com/a/3145655/28557
<强> -----------------------更新-------------------- --- 强>
现在,Android有融合位置提供商
融合位置提供商智能地管理底层定位技术,并根据您的需求为您提供最佳位置。它简化了应用程序获取用户当前位置的方式,提高了准确性并降低了功耗
融合位置提供商提供了三种获取位置的方法
参考文献:
官方网站: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
<强> -------------------------------------------- ------------ 强>
答案 1 :(得分:7)
GPS通常比网络更准确,但有时GPS不可用,因此您可能需要在两者之间切换。
一个好的开始可能是看看android开发网站。他们有一个专门用于确定用户位置的部分,它包含您需要的所有代码示例。
http://developer.android.com/guide/topics/location/obtaining-user-location.html
答案 2 :(得分:3)
这里提到了一些很棒的答案。您可以采用的另一种方法是使用一些免费的在线SDK,如Atooma,tranql和Neura,它们可以与您的Android应用程序集成(集成只需不到20分钟)。 除了为您提供准确的用户位置外,它还可以为您提供有关用户活动的良好见解。此外,其中一些消耗不到电池的1%