Android - 如何在入队时检查Worker是否符合约束条件?

时间:2018-06-07 21:52:09

标签: android android-workmanager

如何在排队时检查Worker是否符合Constraints

例如,如果我需要从互联网上下载数据并确定Worker仅在有互联网连接的情况下运行。如果Worker符合Constraints以提醒用户,我该如何查看?

或者,如果我要执行一项耗费大量电池电量的任务,我想显示Dialog说“开始为智能手机的电池充电开始”

有没有办法从WorkManager执行此操作,还是必须从外部方法执行此操作?

4 个答案:

答案 0 :(得分:1)

使用 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种状态,“入队”对您有用。

答案 1 :(得分:0)

你不必。您只需在OneTimeWorkRequest上设置约束,WorkManager将在满足约束时安排Worker

答案 2 :(得分:0)

这将非常简单,只需删除约束,该约束指出运行作业需要网络连接。

您可以简单地安排一个定期请求(您可以按照我在SO上的回答来实施定期请求),并在触发该请求时检查是否启用了Internet连接。如果是这样,则执行任务,否则只需发布Notification或任何其他合适的方式来通知用户。

答案 3 :(得分:0)

我认为,当不满足约束时(当前没有类似的限制),库应该提供某种回调。

我在此处创建了一个 google问题https://issuetracker.google.com/issues/144367861

随时为它加注星标,以便获得更多的可见度:)