Android位置提供商-GPS或网络提供商?


128

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

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

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

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


18
重新投票-问题很好,提供的答案很有用。答案也已过期,因为现在有了融合位置提供程序-打开问题可以对其进行更新。
理查德·勒·梅修里尔

Answers:


281

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已融合位置提供程序

融合位置提供程序可以智能地管理底层的位置技术,并根据您的需求为您提供最佳位置。它简化了应用程序以更高的准确性和更低的功耗获取用户当前位置的方式

融合的位置提供程序提供了三种获取位置的方法

  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

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


2
请注意,还有一个可供使用的Google Play服务融合定位器提供商。
理查德·勒·梅苏里尔

是否可以制作自己的自定义位置提供程序?android.permission.INSTALL_LOCATION_PROVIDER已签名或系统表示我应该能够在有根设备上安装一个,不是吗?
JohnyTex 2014年

1
融合的位置提供程序仅适用于API> =19。对于运行较旧版本的设备,我们仍然需要遵循旧的过程,对吗?
Shobhit Puri 2014年

如果GPS无法获取位置,是否有示例代码/现有的API查找GPS位置并在一段时间后退回给网络提供商?还是应该通过一些计时器逻辑在代码中处理它?
jrhamza

被动提供程序“”“该提供程序可用于在其他应用程序或服务请求位置更新时被动接收位置更新,而无需您自己实际请求位置。”“”
nurisezgin 2015年

7

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

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

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


@Noman是否要获取位置的经度和纬度?
Nikunj Patel

@Scorpio我实际上想知道NETWORK PROViDER和GPS PROVIDER中哪个选项更好。。.Otra给我发送了一个链接,作为对我的问题的答案,嗯,这对我有很大帮助...现在我在我的应用程序中使用了网络提供程序:-)
Noman

3

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


1
我可以得到您提到的SDK的引用吗?
Kishore Relangi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.