LocationClient
和有什么区别LocationManager
。
它们之间的优缺点是什么(如电池、准确性)?
哪个更好用?
Location Manager
在 Android SDK 中引入,可以作为 android 的一个特性使用。
Location Client
是 Google Play SDK 的一部分,并在最近的 Google IO 2013 中引入。
可以理解,由于 Location Client 是最新的,因此在以最小的能量(电池消耗)和更高的准确性获取位置方面效率更高。
更新: LocationClient已弃用。您必须使用GoogleApiClient。它的一个例子可以在这里找到。
Google Play 服务团队已清理他们的代码并将 LocationClient 功能移至 GoogleApiClient。
http://developer.android.com/training/location/retrieve-current.html中提供了相同的教程
在以下链接上,您可以找到有关此主题的 IO 讨论 http://www.youtube.com/watch?v=Bte_GHuxUGc
再次更新
GoogleApiClient再次被弃用,您必须改用基于GoogleApi的 API。
我一直在 android 中开发一个基于位置的应用程序,我严重不建议在任何情况下使用 LOCATION CLIENT。原因:
位置更新行为非常不正常,不会像您预期的那样工作。即切换网络时位置更新卡住。(它不断给你一些旧的位置)
位置客户端无法在修改过的 android OS 版本上运行,因为它需要 Google Play 服务。
以我的经验,Location Client 可能对手机电池有好处,但不能及时为您提供准确的位置更新。
我推荐好的旧位置管理器,因为我发现位置客户端根本不可靠。
PS:如果您甚至没有在基于位置的应用程序中获取当前位置,则没有节省电池的意义。
编辑:如果您知道 LocationManager 和 LocationClient 的实现(两者都在文档中提供),您可以创建自己的类似 LocationClient 的包装器(带有回调和东西),它将在 LocationManager 上工作,但具有自定义的可调整属性。
编辑2:
请在此处找到 LocationManager Wrapper 类,它提供及时的位置更新:
I have worked on a tracking app and my experience is that LocationManager is better than LocationClient. LocationClient does not provide any way to specify that you want location updates from GPS only. All it allows is to specify "high accuracy". This works for most part but every now and then you get a location update which is hundreds of meters off BUT with a specified accuracy of a few meters. There is no way to know you got an unusable sample. With LocationManager if you specify GPS_PROVIDER you can be assured that you are never going to get wildly inaccurate samples. Working well for us.
来自不久前切换到 Google Play 服务的人,我可以给你一些经验:
我有一个应用程序,大约 2.5 岁,广泛使用位置服务。当然,从一开始,我们就使用了 LocationManager,因为它是 Android 平台上可用的。
与 IOS 相比,我们在 Android 上的定位服务体验非常糟糕。与我们的 IOS 应用程序相比,它有问题、不可靠,并且提供的位置更不精确,而且它消耗的电池更多。这是一个拖累。
因此,当谷歌在今年夏天 6 月推出新的 API 时,我们欣然接受。好多了。有几件事:
它更快更可靠。
它的错误更少。例如,在旧 API 中,我们有时可以得到一个带有新时间戳的“旧”修复。这再也不会发生了。还有更多,但这将是一个更长的帖子。
它肯定会消耗更少的电池。例如,当您打开地图视图时,GPS 一直在运行,并且 GPS 图标可见。新的情况并非如此。这让用户想知道发生了什么。这不再是一个大问题。
因此,当涉及到位置输出和工作时,一切都会更好。但也有一些缺点:
您必须安装 Google Play 服务,这意味着它不适用于任何“未经谷歌批准”的手机型号,在某些情况下,您必须告诉用户他们需要安装它。
API 本身是更复杂的 IMO,部分原因是第 1 点。除了“常规”回调,即等待位置修复等。您现在有一个参与的过程,然后才能开始,您必须检查播放服务可用,并“连接”locationclient。这是额外的代码,掌握起来有点复杂。代码中还要考虑更多错误条件(如果您可能会被打扰......)
Google Play 服务本身至少需要 2.2,因此它不适用于比这更旧的设备。我们不得不告诉一些客户他们必须升级......
希望这可以帮助。