android - 如何从范围存储在 android 11 中打开 Pdf
问题描述
我对android 11中的文件权限有疑问。我正在尝试从我的应用程序在 PDF 查看器中打开一个 PDF 文件,但由于 android 11 中的权限更改,我无法做到这一点。有人可以给我一个代码片段,说明如何做到这一点,因为我无法找到有关此问题的任何代码。
我将pdf文件保存在
context.getApplicationInfo().dataDir
我试图通过打开pdf文件
val pdfFile = File(filePath)
pdfIntent.setDataAndType(Uri.fromFile(pdfFile), "application/pdf")
pdfIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
pdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
pdfIntent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
context.startActivity(pdfIntent)
此代码在 android 11 以下的设备上运行,但不适用于 android 11。
val pdfIntent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
}
val pdfFile = File(filePath)
pdfIntent.setDataAndType(Uri.fromFile(pdfFile), "application/pdf")
pdfIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
pdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
pdfIntent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
context.startActivity(pdfIntent)
我在搜索范围存储时发现了这段代码,但什么也没发生
解决方案
在 android 11 中不允许应用程序查看其他应用程序的文件。要共享文件,您需要使用内容提供商。内容提供者教程中提供了如何声明和设置
推荐阅读
- symfony - API 平台 GraphQL 安全性
- python - 如何在python字典中选择附近的键?
- api - Swagger UI 像沙盒吗?Swagger UI 是如何工作的
- reactjs - 向减速器分派操作时无法更新状态
- react-native - 如何使用相同的数据连接 2 个不同的平面列表?
- xaml - 如何在 Xbox 上修改 CCSelectionButton 的 MediaPlayerElement 的弹出样式?
- jenkins-pipeline - jenkins jacoco 插件单元和集成覆盖分别
- angular - 如何使用 Angular8 创建 WebOs SmarTV 应用程序?
- c - RUNOFF PSET3 - bool is_tie(int min) 函数在 Check50 中出现错误无法删除
- django - Django - Stripe API 集成错误 - 无法验证 Stripe 的 SSL 证书