【问题标题】:LocationClient vs LocationManagerLocationClient 与 LocationManager
【发布时间】:2013-09-25 19:30:00
【问题描述】:

LocationClientLocationManager 有什么区别。

它们之间的优缺点是什么(比如电池、精度)?

哪个更好用?

【问题讨论】:

  • Android 开发者网站上的介绍说速度更快,功耗更低 - developer.android.com/google/play-services/location.html
  • @VishnuHaridas 说哪个“更快,耗电更少”?
  • @JoshPinter 这是 Google Play 服务 API:Location Client 根据该文档,“更快,耗电量更少”。 (在评论中错过了,哎呀!)
  • @VishnuHaridas 竖起大拇指! :)

标签: android geolocation


【解决方案1】:

Location Manager是在Android SDK中引入的,可以作为android的一个特性使用。

Location Client 是 Google Play SDK 的一部分,并在最近的 Google IO 2013 中引入。

可以理解,由于 Location Client 是最新的,因此可以更有效地以最小的能量(电池消耗)和更高的准确度获取位置。

更新: LocationClient 已弃用。你必须使用GoogleApiClient。一个例子可以在here找到。

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。

【讨论】:

  • 在此处添加一个信息性句子:“LocationClient 用于混合来自多个来源(GPS、WiFi、蜂窝塔、传感器等)的数据。”,信息提供:Mark Murphy
  • LocationManager 也使用所有这些功能。 LocationClient 只是 LocationManager 的一个很好的包装器。您可以创建自己的 LocationManager Wrapper(即您自己的 LocationClient)并自行调整
  • 我相信他们使用来自谷歌地图等的资源,这些资源不应该是开源的。这就是他们将其放入 Google Play 服务的原因。如果他们在位置管理器中调整它们,他们必须开源下面的代码。在我看来,这是一个管理决策。
  • LocationClient 已弃用。我更新了答案以避免显示无用的信息。
  • @Tauqir : Location Client 类已更改为 LocationServices。概念是一样的。它就像 LocationManager 不使用 Google Play 服务。而 LocationClient 使用 Google Play 服务来获取信息。然后在进一步的版本中,位置客户端已移至位置服务。使用下面的链接使用 Google Play 服务检索位置。 developer.android.com/training/location/retrieve-current.html
【解决方案2】:

我一直在 android 中开发一个基于位置的应用程序,我绝对不建议在任何情况下使用 LOCATION CLIENT。原因:

  1. 位置更新行为非常异常,无法按预期工作。即切换网络时位置更新卡住。 (它一直给你一些旧的位置)

  2. 定位客户端无法在修改后的 android OS 版本上运行,因为它需要 Google Play 服务。

根据我的经验,Location Client 可能会很好地使用手机的电池,但不能及时为您提供准确的位置更新。

我推荐好的旧位置管理器,因为我发现位置客户端根本不可靠。

附: :如果您甚至没有在基于位置的应用程序中获取您的当前位置,那么节省电池是没有意义的。

编辑: 如果您知道 LocationManager 和 LocationClient 的实现(两者都在文档中提供),您可以创建自己的类似 LocationClient 的包装器(带有回调和东西),它将在 LocationManager 上工作,但具有自定义的可调整属性。

编辑 2:

请在此处找到 LocationManager Wrapper 类,它提供及时的位置更新:

https://github.com/rahulsh12/LocationManagerWrapper

【讨论】:

  • 您能否推荐一个很好的示例/教程,如何使用旧的位置管理器来获取定期位置更新,例如每~1分钟?谢谢。
  • @Blehi 查看goo.gl/P7f3yZ 以了解如何使用旧的位置管理器
  • 谢谢。我已经创建了自己的服务,但“它不断给你一些旧位置”的问题仍然存在。尤其是在切换网络时(例如从 GPS 切换到 WIFI 并返回)。您有时还会收到“无效”职位吗?
  • 如果您使用 LocationManager 创建了自己的位置包装器,您应该使用此处提供的策略/代码检查您获得的旧位置:developer.android.com/guide/topics/location/strategies.html
  • 添加了 LocationManager 类的包装器,以提供类似 LocationClient 的 API 和可靠的位置更新。
【解决方案3】:

我曾开发过一个跟踪应用程序,我的经验是 LocationManager 比 LocationClient 更好。 LocationClient 不提供任何方式来指定您只需要来自 GPS 的位置更新。它所允许的只是指定“高精度”。这在大多数情况下都有效,但时不时地你会得到一个距离数百米但指定精度为几米的位置更新。没有办法知道你有一个无法使用的样本。使用 LocationManager,如果您指定 GPS_PROVIDER,您可以放心,您永远不会得到非常不准确的样本。为我们工作得很好。

【讨论】:

    【解决方案4】:

    来自不久前切换到 Google Play 服务的人,我可以给你一些经验:

    我有一个应用程序,大约有 2.5 年的历史,它广泛使用位置服务。当然,从一开始,我们就使用了 LocationManager,因为它是 Android 平台上可用的。

    与 IOS 相比,我们在 Android 上的定位服务体验非常糟糕。与我们的 IOS 应用程序相比,它有问题、不可靠,并且提供的位置更不精确,而且它消耗的电池更多。这是一个拖累。

    因此,当 Google 在今年夏天 6 月推出新的 API 时,我们欣然接受。好多了。有几点:

    1. 更快更可靠。

    2. 错误更少。例如,在旧 API 中,我们有时可以得到一个带有新时间戳的“旧”修复。这再也不会发生了。还有更多,但这篇文章会更长。

    3. 它肯定会消耗更少的电池。例如,当您打开地图视图时,GPS 一直在运行,并且 GPS 图标可见。新的情况并非如此。这让用户想知道发生了什么。这不再是一个大问题。

    所以,说到位置输出和工作,一切都变得更好了。但也有一些缺点:

    1. 您必须安装 Google Play 服务,这意味着它无法在任何“未经 Google 批准”的手机型号上运行,并且在某些情况下,您必须告诉用户他们需要安装它。

    2. API 本身比 IMO 更复杂,部分原因是第 1 点。除了“常规”回调,即等待位置修复等。您现在有一个参与的过程,然后您可以开始在哪里开始您必须检查播放服务是否可用,并“连接”位置客户端。这是额外的代码,掌握起来有点复杂。代码中还需要考虑更多错误条件(如果您可能会被打扰...)

    3. Google Play 服务本身至少需要 2.2,因此它不适用于旧设备。我们不得不告诉一些客户他们必须升级......

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多