最节能的位置跟踪实现?意图/ BroadcastReciever / LocationListener的/服务/ IntentService / AlarmManager?

时间:2012-04-16 11:10:53

标签: android android-intent alarmmanager intentservice locationlistener

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

  1. 意图+的BroadcastReceiver + LocationListener的
  2. 意图+ IntentService + AlarmManager
  3. LocationListener的
  4. 其他技术或上述的不同组合......
  5. 我正在努力找出实现相同目标的最佳做法(最节能的方式)......

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

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

    我不希望GPS始终开启?实际上它应该仅在T和X交叉时打开。使用Service / IntentService和/或/与警报管理器Timer将是一个更好的解决方案吗?具有LocationListeners的BroadcaastReceivers可以证明是更好的解决方案吗?

    请建议。日Thnx

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

 > Most power efficient location tracking implementation?

最节能(和最简单)的解决方案是根本不使用gps ,因为gps接收器(至少在我的三星智能手机上)会显着增加功耗。

如果您的Android应用程序在登录到其手机提供商的手机上运行,​​则手机小终端广播会告诉手机该小区位置已更改。您的应用可以收到这些。太

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

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

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