我有一个带有服务的应用程序,该服务正在使用“位置管理器”将用户在其他数据中的位置发送到我们的后端服务器。 该服务仅在用户打开某些活动时才处于活动状态(理论上可能永远不会启动,但实际上并非如此)。
现在,客户端要求应用程序在上午9点和下午5点向用户发送位置信息。
过去,我已将警报管理器与广播接收器一起使用,以在特定的时间间隔执行某些任务,但是我不确定哪种方案最适合此操作。 问题是应用程序可能没有正确的位置(GPS还没有修复),现在,在这种情况下,我应该重复检查直到位置固定,然后将其发送(之后早上9点)。有更好的解决方案吗?那我应该使用哪种方案?
答案 0 :(得分:1)
您遇到的所有问题都来自您想在后台实现所有目标的事实。如果您可以考虑使用前台服务(创建UI通知),那么我在下面讨论的所有限制都不会适用,您将过上轻松的生活:)
了解“ App Standby” here:
当用户将设备插入电源时,系统 从待机状态释放应用程序,从而允许它们自由访问 网络并执行所有待处理的作业和同步。如果设备 长时间处于闲置状态,系统允许闲置应用 每天大约一次访问网络。
这意味着您不能保证在指定的时间进行网络操作,除非您使用的是FCM(Firebase云消息传递)。顺便说一句,小批量免费。
要求设备> = M(Android 6)进行联网操作的正确方法是使用JobScheduler或WorkManager安排此类任务。如下所述-每天至少启用一次网络即可唤醒您。你只是不知道什么时候:)
添加位置要求使其变得更加棘手,因为从Android O(Android 8)开始每小时只能获得几个位置。因此,您可以在后台快速进行GPS请求,但不能仅仅因为可能已经完成位置计数配额¯\ _(ツ)_ /¯
而保证良好的解决方案。底线:调整雇主的期望或考虑应用前景。
答案 1 :(得分:0)