我正在创建一个应用程序,它将每天早上8:00自动将Android设备设置为静音模式?我使用了带有前景服务的AlarmManager,Job-Scheduler,但在Android 8或更高版本上无法使用..我也使用WorkManager,但WorkManager需要某些约束才能运行该作业。.plZzz帮助我
我建议坚持使用Worker
,它与WorkManager
相似,但没有强制性约束。 Worker
和WorkManager
通过降低到AlarmManager来自动处理较低版本的SDK。
我已将应用程序的AlarmManager
替换为Worker
,对于定期任务它更加稳定。
您只需要一个Worker类MyPeriodicWorker.class
:
public class MyPeriodicWork extends Worker {
private static final String TAB = MyPeriodicWork.class.getSimpleName();
public MyPeriodicWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.e(TAB,"PeriodicWork in BackGround");
// Run your task here
return Result.success();
}
}
和从另一个类调用的WorkRequest
实例。对于您的情况,您需要PeriodicWorkRequest
来执行重复任务。如果要让任务在指定的时间运行(最少提前5分钟的flex),则必须为flex指定参数:
PeriodicWorkRequest mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(MyPeriodicWorker.class,
periodMS, TimeUnit.MILLISECONDS, periodFlex, TimeUnit.MINUTES)
.addTag("PeriodicWorkRequest")
.build();
以上是您需要使用的全部,然后使用WorkManager
enqueue
开始。
WorkManager.getInstance(context).enqueue(mPeriodicWorkRequest);