Many similar posts exist but none of them contains the doze mode problematic with alarmmanager and short periodic updates.
目标:在GPS的帮助下接收定期中断以更新位置
要求:
-
主要在gps的帮助下定期更新位置,相对精确每分钟1次( - 10秒)
-
适用于较新的Android设备(包括打瞌睡)
实际想法:
- 使用"Start_Sticky"服务中的警报管理器 . 警报管理器每隔一分钟发送一次广播,通知gps接收器读取该位置并将其发送到服务器 . Alarmmanager配置有AlarmManager.ELAPSED_REALTIME_WAKEUP .
问题:
-
The alarmmanager is not reliable anymore since the functionality of doze . 当设备处于打盹状态时,不会发送警报管理器 .
-
屏幕关闭时,我没有收到gps的位置更新
有关此问题的其他信息:
- 有关于此的多个信息,例如link,但似乎通过打瞌睡警报管理器不再可靠 - 意味着此解决方案不再可用 .
注意:setAndAllowWhileIdle()和setExactAndAllowWhileIdle()都不能每个应用程序每9分钟触发一次警报 . src
Question:
我需要哪些组件来实现这一目标?前台服务,Alarmmanager,Wakelock?
1 回答
使用推送通知并将其设置为高优先级,这可能是在深度睡眠模式下使应用程序保持运行以进行gps跟踪的最可靠方式 . 我设置了30分钟的时间间隔,并继续发送通知,手机没有唤醒和屏幕打开,但我注意到GPS仍然有点工作 .