3

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

  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 的广播接收器能否被证明是更好的解决方案?

请建议。

4

2 回答 2

2

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

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

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

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

于 2012-04-16T11:23:26.170 回答
0
 > Most power efficient location tracking implementation?

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

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

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

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

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

于 2012-04-16T12:22:09.130 回答