Android定位提供商 – GPS或networking提供商?

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

  1. 有不同的定位提供商,哪一个最准确? GPS提供商或networking提供商 ?

  2. 这些提供商有多远? 他们如何运作?

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

Android中有3个位置提供者。

他们是:

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

networking – >(AGPS,CellID,WiFi MACID):networking位置提供商的名称。 该提供商基于小区塔和WiFi接入点的可用性来确定位置。 结果通过networking查找来检索。 需要权限android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION。

被动 – >(CellID,WiFi MACID):一个特殊的位置提供商,用于接收位置,而不需要实际启动定位。 当其他应用程序或服务请求时,可以使用此提供程序被动接收位置更新,而无需实际请求您的位置。 该提供者将返回由其他提供者生成的位置。 需要权限android.permission.ACCESS_FINE_LOCATION,尽pipe如果GPS没有启用这个提供者可能只返回粗略的修复。 这就是Android所谓的位置提供者,然而,使这些东西工作的基础技术被映射到硬件和电信提供的特定function集合(networking服务)。

最好的方法是首先使用“networking”或“被动”提供者,然后使用“gps”,并依赖于任务,在提供者之间切换。 这涵盖了所有的情况,并提供最低的公分母服务(在最坏的情况下)和优质的服务(在最好的情况下)。

在这里输入图像描述

文章参考: Android位置提供商 – gps,networking,被动按Fernando Cejas

代码参考: https : //stackoverflow.com/a/3145655/28557

———————–更新———————–

现在Android有融合的位置提供商

Fused Location Provider智能pipe理底层定位技术,并根据您的需求为您提供最佳位置。 它简化了应用程序以更高的精度和更低的功耗使用户的当前位置

融合的位置提供者提供三种获取位置的方式

  1. 最后一个地点:当你想知道当前位置一次使用。
  2. 使用Listener请求位置:当应用程序在屏幕/前端时使用,并要求继续定位。
  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

————————————————– ——

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

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

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

这里提到了一些很好的答案。 你可以采取的另一种方法是使用一些免费的SDK,如Atooma,tranql和Neura,可以与你的Android应用程序集成(整合需要不到20分钟)。 除了为用户提供准确的位置之外,还可以让您了解用户的活动。 此外,其中一些消耗电量less于1%