基本上我想做的是,当有互联网连接时,然后从传感器收集值并安排下次从传感器收集数据,比如说5分钟(这个间隔取决于当前的活动:步行,跑步。 ..)。 5分钟后,系统会检查是否有互联网连接:
- 如果有,则重复循环(收集,发送到服务器并安排下一个数据收集)
*如果没有,则下次收集数据时安排下次有可用的互联网连接
我尝试使用的内容:
1)我想为api< 21使用广播接收器,为api> = 21使用作业调度器。 对于作业调度程序,我无法设置需求可用网络并同时定期作业,因为这种方式在句点结束后运行是否满足要求。
2)我尝试在当前服务结束后将作业服务设置为下一个作业,但应用程序运行时好像该部分代码不存在(只运行一次)
3)我试图以某种方式将作业调度程序与警报管理器结合起来,使作业调度程序管理网络需求,并且警报管理器管理作业的周期性方面。但我没有实现这一点,我觉得这不是正确的方法。
如果有人可以指导我更好地处理这个问题,我会非常感激,因为我花了很长时间试图解决这个问题。
答案 0 :(得分:1)
我会推荐一个名为android-job的Evernote图书馆。它处理在21 +,Firebase / GcmNetworkManager或AlarmManager以及各种其他事情上选择JobScheduler的所有复杂性。它有一套非常强大的功能,适合您的使用案例。
例如:
int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
.setExecutionWindow(30_000L, 40_000L)
.setBackoffCriteria(5_000L, JobRequest.BackoffPolicy.EXPONENTIAL)
.setRequiresCharging(true)
.setRequiresDeviceIdle(false)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setExtras(extras)
.setRequirementsEnforced(true)
.setPersisted(true)
.setUpdateCurrent(true)
.build()
.schedule();