android-download-manager - Android:为什么我无法在 Android 11 的公共 Download/myfolder 目录中打开从 DownloadManager 下载的 pdf?
问题描述
我在 Android 9 中没有遇到这个问题,在 Android 10 中我选择了旧版存储。但在 Android 11 中,我无法打开从下载管理器下载的文件。不过,可以从文件管理器打开相同的文件。
另外,我检查了该文件的所有者,它显示的是 com.android.providers.downloads 而不是我的应用程序。
我还在 Document/myfolder 目录中创建了一个 pdf 文件,它可以使用意图轻松打开,并且我的应用程序是该文件的所有者。
此外,如果我将下载的文件保存到 Document/myfolder 目录,它仍然无法使用该意图打开。
据我了解,从 Android 11 开始,他们引入了范围存储,以及该文件的所有者是否正在访问它。它将允许通过 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限进行读/写。
对于这两个文件,我使用的是相同的 Intent。
任何人都知道如何更改我下载的文件的所有者以便我可以打开或者我无法打开下载的文件的确切原因是什么?
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, PDF_TYPE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
这里 PDF_TYPE 是正确的,uri 也是正确的。
DownloadManager 代码在这里也是正确的一小段
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, subPath.getPath());
解决方案
我有同样的问题,但在 Android 10 中。
这适用于我在 Android 11
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, file);
推荐阅读
- azure - Azure AD B2C - 在浏览器关闭/重新打开之间维护 OTP
- markdown - Jekyll 不在子目录中生成 index.html
- flutter - 来自 AndroidManifest.xml:17:9-28 的属性 application@label value=(AOL)
- redux - 使用 1 个调度操作/reducer 调用更新 2 个 Redux Store 属性?(React-Redux)
- node.js - 如何在节点 js 中传递变量?
- avaloniaui - 如何在背景中平铺图像?
- javascript - Webgl 不需要的纹理混合
- php - 在 PHP 中添加 HTML 问题
- c# - 不允许使用 Angular 405 方法和“显示临时标题”错误
- reactjs - 如何根据用户令牌的存在显示元素