基本上,我想做的是,当有互联网连接时,然后从传感器收集值,并安排下一次从传感器收集数据时,比如说5分钟(这个间隔取决于当前的活动:步行、跑步.)。5分钟后,系统检查是否有互联网连接:
-if --然后循环被重复(收集、发送到服务器和调度下一个数据收集)
*如果没有,那么下次收集数据的时间安排在下一次有可用的internet连接时
我尝试使用的:
1)我想为api<21使用广播接收器,为api>=21使用作业调度器。对于作业调度程序,我不能同时设置需求可用网络并使作业周期性,因为这样的话,作业在周期结束后运行,是否满足了需求。
2)在当前的作业结束后,我尝试让作业服务设置下一个作业,但是应用程序运行时好像代码的那一部分不存在(它只运行了一次)。
3)尝试将作业调度器与告警管理器相结合,使作业调度器管理网络需求,告警管理器管理作业的周期性方面。但我没能实现这一点,我觉得这不是正确的方法。
如果有人能引导我找到一个更好的方法来处理这个问题,我会非常感激的,因为我花了很长时间来解决这个问题。
发布于 2017-02-24 21:12:51
我推荐Evernote的一个名为安卓-作业的图书馆。它处理在JobScheduler上选择21+、Firebase/GcmNetworkManager或AlarmManager以及其他各种事情的所有复杂性。它有一组非常健壮的特性,应该适合您的用例。
例如:
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();https://stackoverflow.com/questions/42448150
复制相似问题