Answers:
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位置提供程序-gps,网络,被动作者:Nazmul Idris
代码参考: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
-------------------------------------------------- ------
GPS通常比网络更准确,但有时GPS不可用,因此您可能需要在两者之间进行切换。
一个好的开始可能是看一下android dev网站。他们有专门用于确定用户位置的部分,其中包含您需要的所有代码示例。
http://developer.android.com/guide/topics/location/obtaining-user-location.html
这里提到了一些很好的答案。您可以采取的另一种方法是使用一些免费的在线提供的SDK,例如Atooma,tranql和Neura,这些SDK可以与您的Android应用程序集成(集成时间不到20分钟)。除了为您提供用户的准确位置之外,它还可以为您提供有关用户活动的深刻见解。此外,其中一些电池消耗的电量不到电池的1%