问题标签 [android-workmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
256 浏览

android - 多个 OneTimeWorkRequests 延迟为链

我正在制作一个应用程序 Medicine Reminder,它应该根据数据库中保存的日期和时间提醒药物消耗。提醒应以通知的形式进行。假设我有一种药物应该服用两次(例如在晚上 9:50 和晚上 9:55 进行快速测试)。通过单击按钮触发通知。

我的问题 - 只会显示第一个通知,而其他通知不会。

这是我的代码:

您有什么建议/解释/解决方案吗?

0 投票
4 回答
1105 浏览

android - Android - 如何检查 Worker 在入队时是否满足约束?

我如何检查是否在排队时Worker遇到?Constraints

例如,如果我需要从 Internet 下载数据并确定Worker只有在有 Internet 连接时才运行。我如何在那个时候检查是否Worker满足Constraints提醒用户?

或者,如果我要执行一项可能会消耗大量电池电量的任务,并且我想显示Dialog一句话“开始为智能手机的电池充电以启动”

有没有办法从外部方法做到这一点,WorkManager或者我必须从外部方法做到这一点?

0 投票
2 回答
10539 浏览

android - WorkManager 如何安排对 REST API 的 GET 请求?

我已经查看了 WorkManager 的代码实验室以及此处的一些示例,但是我所看到的代码中的所有内容都与在设备上本地工作或上传到服务器的工作有关,而不是下载数据并响应收到的数据. 在开发人员指南中甚至说,“例如,一个应用程序可能需要不时从网络下载新资源”,所以我认为它非常适合这项任务。我的问题是 WorkManager 是否可以处理以下情况,如果不能,处理它的正确工具是什么:

  1. 安排每天在后台运行一次的作业
  2. 工作是从 REST API 获取数据(如果可能,将其发布到 LiveData 对象)。
  3. 当数据返回时,检查它是否比本地数据更新。
  4. 通知用户有新数据可用。

我的工人阶级看起来像这样:

我的问题当然是 LiveData 对象无法观察,因为没有可以作为其 LifecycleOwner 的活动或片段。但即使我使用来自 API 的回调来响应到达的数据,我的工作人员也会发布它是成功的并且它可能不会继续回调,对吗?所以我有点知道这种方法是完全错误的,但是我看不到任何使用 WorkManager 获取数据的代码

请提供适当的解决方案和一些示例代码或一些链接,如果它可以处理此类工作,请使用 WorkManager 或其他更合适的东西。

0 投票
1 回答
1417 浏览

android - 在三星 Galaxy 手机上进入打盹模式后,WorkManager 被取消

我正在尝试使用 WorkManager 运行后台服务。当应用程序进入后台时,我启动了 WorkManager。每当 WorkManger 运行时,我也会启动后台服务。应用程序进入后台后,我可以看到我的应用程序服务。我还可以看到它是在我通过在应用列表中滑动关闭应用后大约 15 分钟后启动的。所以我确信 workmanager 正在开始工作。但我认为它不适用于打盹模式。从打盹模式唤醒手机后,我也看不到我的服务。

我的代码:

有什么不对?

0 投票
1 回答
1193 浏览

android - 由于奥利奥、一加 3 中的电池优化,警报管理器无法正常工作

我一直在使用警报管理器在一天中的特定时间间隔显示通知。当应用程序被杀死/刷走时,现在显示通知的功能停止工作。

阅读此线程上的答案后: setExactAndAllowWhileIdle() for alarmmanager 无法正常工作

我关闭了我的应用程序的电池优化(我也可以通过编程方式进行),即使应用程序没有运行,我也开始收到通知。我已经尝试过工作管理器(仍处于 alpha 阶段)。它有同样的问题,尽管它说它会考虑每一种可能的情况来执行任务。这个问题主要与奥利奥有关。寻找相同的解决方法。如果需要,将发布代码片段。

注意:我希望我的应用程序在优化列表中,因此我避免使用这种方法。另外我也尝试过 setAlarmClock ,同样的问题仍然存在,它还在主屏幕上显示时间间隔作为警报。

0 投票
2 回答
3003 浏览

android-architecture-components - 如何清除Android中WorkManager创建的WorkStatus?

OneTimeWorkRequest当我使用 android-arch 工作 WorkManager 时,我创建了一些。

我可以WorkStatus像这样被观察者观看

我的 Android 拱门版本是android.arch.work:work-runtime:1.0.0-alpha02

WorkStatus但是名单里有很多,一些SUCCEEDED,一些ENQUEUED,一些CANCELLED,而且名单的数量还在不断增加。如何清除工作状态列表?

0 投票
1 回答
508 浏览

android - WorkManager 自定义 URL 约束?

我已经使用android-priority-job-queue V2了 2 年了(很棒的图书馆)。安卓刚Workmanager出现。我喜欢它的地方在于它非常易于设置,您不必与 、 或 争吵JobSchedulerFirebase JobDispatcherAlarmManager是为我们完成的。我android-priority-job-queue V2不得不手动设置FrameworkJobSchedulerService/ GcmJobSchedulerService

是否可以Workmanager添加某个 http url 作为约束?有时,您想将一些数据发送到受保护的 wifi 中的服务器,并且您远离地理区域。当您位于服务器的地理区域并且您的设备连接到 wifi 时,您拍摄一张照片(例如)您必须稍后保存在该服务器上。url 约束将确保如果 url 不可访问,则永远不会执行或刷新工作请求(设置为失败)。当 url 约束与连接性一致时,执行工作请求。

有了android-priority-job-queue V2,我必须实现一个逻辑,检查何时抛出一个 http 异常,并使用Room Persistence Library保存未发送的android-priority-job-queue V2数据。然后,每次我通过BroadCastReceiver检测到连接更改状态时,我都会尝试重新发送未发送的数据并标记那些最终发送的数据(那些完成了in 的数据)。稍后,我将通过定期例程从数据库中刷新所有发送的数据。此解决方案有效。但是假设我想发送不同类型的数据(图片、位置等),我必须为每种不同类型的 Job 重写相同的例程。我不知道如何对.shouldReRunOnThrowable(Throwable throwable, int runCount,int maxRunCount)onRun()android-priority-job-queue V2WorkManager

如果实现此功能,有人可以通过指出我可能错过的文档部分来帮助我吗?或者至少是一种使用WorkManager.

PS:WhisperSystems 的 JobManager允许我添加自定义 url。然而问题是它的持久性在某些设备(某些三星型号)上不起作用。当我使应用程序崩溃时,数据从未恢复。我去github寻求帮助,无济于事。我并没有指责任何人,我只是想表明我一直在为此寻找解决方案。

0 投票
1 回答
552 浏览

java - WorkManger 适用于 Oreo 但不适用于 Lollipop

WorkManager声明它可以在之前JobScheduler的操作系统上运行等,但它似乎不适用于使用AlarmManager. 我有一个PeriodicWorkRequest在奥利奥上以间隔运行的好,但在棒棒糖上,它只运行第一次。

有问题的代码(当然PeriodicWorker.class是我自己class的):

我的 WorkManager 依赖项是android.arch.work:work-runtime:1.0.0-alpha03.

这是一个演示项目:https ://gitlab.com/neelkamath/work-manager-demo

0 投票
0 回答
919 浏览

android - 如何从其他 Activity 获取 ViewModel?

我正在我的应用程序上创建登录活动。

当用户尝试登录时,我有一个Viewmodel++来更新LiveDataTextView并显示有关所有后台工作进度的信息。DataBingind

所有后台工作均由Workers

我可以ViewModel从 LoginActivty 访问和更新,观察进度Worker

State.FAILED但是我只能在进程失败或成功时访问 Worker 内部的数据State.SUCCEEDED......

因此,例如,如果Worker最后 10 秒内的所有工作,我无法ViewModel从我的登录活动更新,直到所有工作完成......但如果我ViewModel从 Worker Activity 访问相同的内容,我可以在该过程中更新。

如何从其他 Activity 获取 ViewModel?

如何从 Worker 活动中获取相同的 LoginWorkerViewModel 实例(在 LoginActivity 中创建并为 dataBinding 设置)?

0 投票
1 回答
808 浏览

android - 入队后更改 PeriodicWorkRequest 的重复间隔

有什么简单的方法可以改变重复间隔PeriodicWorkRequest吗?

让我们Worker每 6 小时触发一次并且已经入队,但我需要将其更改为 3 小时。

如果解决方案是取消请求并创建新请求,那么没有重复的干净方法是什么?