我一直在通过解决方案,发现有很多方法可以实现位置跟踪逻辑。
我正在努力找出实现相同目标的最佳做法(最节能的方式)......
我有一个库类MyLocationClass.java,它有两个方法 1. startTracking() - 在T时间之后开始发送用户位置,并且仅当用户移动了X距离时才开始 2. stopTracking() - 停止发送位置更新。
一个简单的答案似乎是一个LocationListener,因为它内置的Time Passed / Distance Moved功能提供了更好的用户体验,但随后......
我不希望GPS始终开启?实际上它应该仅在T和X交叉时打开。使用Service / IntentService和/或/与警报管理器Timer将是一个更好的解决方案吗?具有LocationListeners的BroadcaastReceivers可以证明是更好的解决方案吗?
请建议。日Thnx
答案 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并将它们标记为”工作“。