如何将下载管理器与存储访问框架/Mediastore 结合使用

2024-01-11

我需要下载一个 pdf 文件,然后触发一个意图,以便其他合适的应用程序可以显示该文件。到目前为止,我一直在使用setDestinationInExternalPublicDir of DownloadManager将我的下载目标设置为下载目录的子目录。然后我用了getExternalStoragePublicDirectory创建文件并获取 uriFileProvider并最终激发了意图ACTION_VIEW.

现在有了范围存储,getExternalStoragePublicDirectory已弃用。我本来打算使用 SAF/MediaStore,但他们提供了内容 uri,我无法使用它来设置下载目的地DownloadManager。有办法解决这个问题吗?我正在考虑存储可以通过的内容 uriDownloadManager.getUriForDownloadedFile在共享首选项中,然后使用它来激发意图,而不需要getExternalStoragePublicDirectory。但如果在范围存储合规性限制内存在使用 DownloadManager 的兼容方式,我希望避免此类“黑客行为”。


然后我使用 getExternalStoragePublicDirectory 创建文件并通过 FileProvider 获取 uri,并最终使用 ACTION_VIEW 触发意图。

不,那不是正确的方法。

相反,您应该为 ACTION_DOWNLOAD_COMPLETE 注册一个广播接收器。

在 onReceive() 中,您可以获得下载文件的 uri。

使用该 uri 并为您的意图 ACTION_VIEW 授予读取权限标志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将下载管理器与存储访问框架/Mediastore 结合使用 的相关文章

随机推荐