我需要在 Android 手机上进行后台 GPS 跟踪,我目前计划有两种情况:
- 当手机连接到(车载)充电器时,获取频繁的 GPS 位置(每分钟)。
- 当手机未连接充电器时,仅每 5-30 分钟轮询一次位置,具体取决于电池受影响的程度。
我知道我需要在服务中实现跟踪,并且可能会显示通知以保持服务处于活动状态。但是,我认为手机可能随时进入睡眠模式,这将停止 GPS 跟踪。
对于这些场景,在不让手机进入睡眠状态且不会消耗太多电量的情况下,进行持续的后台 GPS 跟踪的最佳方法是什么?
到目前为止,我收集了以下内容:
对于场景 1,我可能需要获取 WakeLock,并始终保持 CPU 唤醒(但屏幕可能会休眠)。MyTracks 应用程序似乎在TrackRecordingService中执行此操作。OpenGPSTracking 似乎也是如此。
对于场景 2,我可以使用 AlarmManager 安排每 x 分钟检查一次。我的服务需要获取一个临时的 WakeLock,等待一个 GPS 位置,然后停止并再次释放 WakeLock。
这两种方法(永久 WakeLock 与 AlarmManager)的功耗比较如何?如果每 30 分钟检查一次,GPS 能否在合理的时间内接收到准确的位置?
StackOverflow 上有一些相关的问题,但没有一个令人满意的答案。一些半有用的:
- 如何保持应用程序在后台运行?继续收集数据?(指向我的 MyTracks)
- 在后台跟踪用户的短信和地理位置 - 我的想法有效吗?
- 始终开启 GPS 的 Android 服务