如何使用工作管理器下载一组数据,其中包括图像和视频以及进度详细信息?

How to download a set of data which includes images and videos using work manager along with progress detail?

提问人:RKB 提问时间:9/10/2021 最后编辑:RKB 更新时间:9/10/2021 访问量:1154

问:

在我的 Android 应用程序中,有一个从服务器获取的一些对象的列表。此对象 JSON 中的每一个都包含一些文本数据以及一组图像和视频 URL。用例是,用户只需单击一下即可下载整个数据,并将其存储在本地存储中。

我正在尝试使用工作管理器的不同方法来实现这一目标,但由于正在下载多个文件,因此我无法找到一种方法来跟踪整个下载进度以显示在 UI 中。另外,我如何确保该特定对象的全部数据是否完全从下载的文件中下载,以防其中任何一个失败?

安卓 android-workmanager android-download-manager

评论

0赞 PPartisan 9/10/2021
你考虑过吗?它带有显示进度的通知DownloadManager
1赞 RKB 9/10/2021
是的,我考虑过,但是即使用户在开始下载后杀死/终止了应用程序,我也需要下载才能在后台工作。下载管理器将显示每个正在下载的文件的单独进度通知。
0赞 David Vareka 9/10/2021
用于跟踪下载状态更改的广播接收器怎么样?尽管如此,您仍然必须实现如何计算进度。

答:

2赞 Sam Chen 9/10/2021 #1

将此下载进度作为一个整体进行跟踪,以便在 UI 中显示,因为有多个文件正在下载。

在过去,我们需要使用 ,但现在它可以在 上使用。若要与“ForegroundService”功能一起使用,请查看以下文章:ForegroundServiceWorkManagerWorkManager


我怎样才能确保该特定对象的全部数据是否完全从下载的文件下载,以防其中任何一个失败?

您可以对某个字段进行 null 检查。

评论

1赞 Anton Malyshev 6/2/2022
在 Android 12 中,使用 setForeground / setForegroundAsync 的方法不可靠。正如文档 developer.android.com/reference/androidx/work/ 中所述:“当进程受到前台服务限制时,调用 setForegroundAsync 将失败并显示 IllegalStateException。请考虑改用 WorkRequest.Builder.setExpedited(OutOfQuotaPolicy) 和 getForegroundInfoAsync()。但是,getForegroundAsync 只允许返回一次通知,因为它返回 .在这种情况下,我们是否可以更新通知?ListenableFuture