【问题标题】:How to use Download Manager with Storage access framework / Mediastore如何将下载管理器与存储访问框架/媒体存储一起使用
【发布时间】:2021-04-27 20:30:35
【问题描述】:

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

现在使用范围存储,getExternalStoragePublicDirectory 已弃用。我计划使用 SAF/MediaStore,但它们提供的内容 uri 无法用于在 DownloadManager 中设置下载目标。有没有办法解决这个问题?我正在考虑将可以通过DownloadManager.getUriForDownloadedFile 获取的内容uri 存储在共享首选项中,然后在不需要getExternalStoragePublicDirectory 的情况下使用它来触发意图。但是,如果在范围存储合规性限制内有使用 DownloadManager 的兼容方式,我想避免这种“黑客行为”。

【问题讨论】:

    标签: mediastore android-download-manager storage-access-framework scoped-storage


    【解决方案1】:

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

    没有。这不是要走的路。

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

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

    将该 uri 与您的意图 ACTION_VIEW 的授予读取权限标志一起使用。

    【讨论】:

    • 是的,我现在正在使用它。但是,当我需要稍后打开 pdf 时(即,不是在同一活动中下载之后),一种方法可以是将内容 uri 和文件名映射存储在共享首选项中。我正在扫描 MediaStore.Downloads 表,因为该表可以看到下载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2019-12-21
    • 2014-08-02
    相关资源
    最近更新 更多