【问题标题】:Most power efficient location tracking implementation? Intent/BroadcastReceiver/LocationListener/Service/IntentService/AlarmManager?最省电的位置跟踪实施? Intent/BroadcastReceiver/LocationListener/Service/IntentService/AlarmManager?
【发布时间】:2012-04-16 11:10:52
【问题描述】:

我已经通过解决方案,发现有很多方法可以实现位置跟踪逻辑。

  1. Intent+BroadcastReceiver+LocationListener
  2. Intent+IntentService+AlarmManager
  3. 位置监听器
  4. 其他技术或上述的不同组合...

我正在尝试找出实现相同目标的最佳做法(最省电的方式)...

我有一个库类 MyLocationClass.java,它有两种方法 1. startTracking() - 在 T 时间后开始发送用户位置,并且仅当用户移动了 X 距离时 2. stopTracking() - 停止发送位置更新。

一个简单的答案似乎是 LocationListener,因为它内置的 Time Passed/Distance Moved 功能可提供更好的用户体验,但是...

我不想让 GPS 一直开启?事实上,它应该只在 T 和 X 交叉时打开。使用 Service/IntentService 和/或/与警报管理器 Timer 会是更好的解决方案吗?带有 LocationListeners 的广播接收器能否被证明是更好的解决方案?

请提出建议。

【问题讨论】:

  • 这完全取决于你想对数据做什么

标签: android android-intent alarmmanager intentservice locationlistener


【解决方案1】:

我认为,您可以使用在服务中实现的位置侦听器。服务启动时开始监听 GPS,服务停止时移除 GPS 监听器。当您想收听 GPS 时启动此服务。

另外请看一下“requestLocationUpdates”方法。该函数的 minTime 和 minDistance 字段解释如下:

minTime 通知的最小时间间隔,以毫秒为单位。此字段仅用作省电提示,位置更新之间的实际时间可能大于或小于此值。

minDistance 通知的最小距离间隔,以米为单位

【讨论】:

    【解决方案2】:
     > Most power efficient location tracking implementation?
    

    最省电(但不准确)的解决方案是不使用 gps,因为 gps 接收器(至少在我的三星智能手机上)会显着增加功耗。

    如果您的 android 应用程序在登录到其手机提供商的手机上运行,​​则有 cellphone cellid-broadcasts 会告诉手机手机位置已更改。您的应用可以接收这些。也是。

    手机接收器已经在运行,手机必须唤醒以保持连接,因此能量开销最小。

    但是,您必须找到一种方法将 cell-id 转换回某个位置。

    Android 应用 llama 使用此 cellid-broadcast 来触发基于位置的操作。它有一个学习模式,我可以说:“现在我在工作 7 个小时。在后台它收集所有 cellid-s 并将这些标记为“工作”。

    【讨论】:

    • 感谢 k3b。我的问题更多是关于哪种实现会产生最佳结果,保持其他参数(CellTower Triang/GPS 恒定)。所以假设我必须使用 GPS 来获得准确性,现在我应该如何实现逻辑?我应该选择 Listeners 还是 Receivers 或 Service 等...?
    • 你已经得到了答案,位置监听器在服务中实现。
    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多