我如何检查是否在排队时Worker
遇到?Constraints
例如,如果我需要从 Internet 下载数据并确定Worker
只有在有 Internet 连接时才运行。我如何在那个时候检查是否Worker
满足Constraints
提醒用户?
或者,如果我要执行一项可能会消耗大量电池电量的任务,并且我想显示Dialog
一句话“开始为智能手机的电池充电以启动”
有没有办法从外部方法做到这一点,WorkManager
或者我必须从外部方法做到这一点?
我如何检查是否在排队时Worker
遇到?Constraints
例如,如果我需要从 Internet 下载数据并确定Worker
只有在有 Internet 连接时才运行。我如何在那个时候检查是否Worker
满足Constraints
提醒用户?
或者,如果我要执行一项可能会消耗大量电池电量的任务,并且我想显示Dialog
一句话“开始为智能手机的电池充电以启动”
有没有办法从外部方法做到这一点,WorkManager
或者我必须从外部方法做到这一点?
我认为库应该在不满足约束时提供某种回调(目前没有类似的东西)。
我在这里创建了一个谷歌问题:https ://issuetracker.google.com/issues/144367861
随意给它加星标,这样它就可以获得更多的知名度:)
使用getWorkInfoByIdLiveData().observe()
WorkManager.getInstance().enqueue(WorkRequest);
WorkManager.getInstance().getWorkInfoByIdLiveData(WorkRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
switch (workInfo.getState()) {
case ENQUEUED:
// TODO: Show alert here
break;
case RUNNING:
// TODO: Remove alert, if running
break;
case SUCCEEDED:
// TODO: After work completed
break;
case FAILED:
break;
case BLOCKED:
break;
case CANCELLED:
break;
}
}
});
WorkInfo.State有 6 个状态,ENQUEUED 可能对您有用。
你不必。您可以只在 上设置约束,OneTimeWorkRequest
并在满足约束时WorkManager
安排Worker
。
这就像删除表明运行作业需要网络连接的约束一样简单。
您可以简单地安排一个定期请求(您可以按照我在此SO上的回答来实施定期请求),当它被触发时,检查是否启用了互联网连接。如果是,则执行任务,否则只需发布通知或任何其他合适的方式来通知用户。