警报管理器和位置管理器

时间:2018-07-11 12:53:49

标签: android alarmmanager android-pendingintent locationmanager

我有一个带有服务的应用程序,该服务正在使用“位置管理器”将用户在其他数据中的位置发送到我们的后端服务器。 该服务仅在用户打开某些活动时才处于活动状态(理论上可能永远不会启动,但实际上并非如此)。

现在,客户端要求应用程序在上午9点和下午5点向用户发送位置信息。

过去,我已将警报管理器与广播接收器一起使用,以在特定的时间间隔执行某些任务,但是我不确定哪种方案最适合此操作。 问题是应用程序可能没有正确的位置(GPS还没有修复),现在,在这种情况下,我应该重复检查直到位置固定,然后将其发送(之后早上9点)。有更好的解决方案吗?那我应该使用哪种方案?

2 个答案:

答案 0 :(得分:1)

您遇到的所有问题都来自您想在后台实现所有目标的事实。如果您可以考虑使用前台服务(创建UI通知),那么我在下面讨论的所有限制都不会适用,您将过上轻松的生活:)

了解“ App Standby” here

  

当用户将设备插入电源时,系统   从待机状态释放应用程序,从而允许它们自由访问   网络并执行所有待处理的作业和同步。如果设备   长时间处于闲置状态,系统允许闲置应用   每天大约一次访问网络

这意味着您不能保证在指定的时间进行网络操作,除非您使用的是FCM(Firebase云消息传递)。顺便说一句,小批量免费。

要求设备> = M(Android 6)进行联网操作的正确方法是使用JobSchedulerWorkManager安排此类任务。如下所述-每天至少启用一次网络即可唤醒您。你只是不知道什么时候:)

添加位置要求使其变得更加棘手,因为从Android O(Android 8)开始每小时只能获得几个位置。因此,您可以在后台快速进行GPS请求,但不能仅仅因为可能已经完成位置计数配额¯\ _(ツ)_ /¯

而保证良好的解决方案。

底线:调整雇主的期望或考虑应用前景。

答案 1 :(得分:0)