升级到 API 33 后,读取共享 DOCUMENTS 文件夹中 excel 文件的权限始终被拒绝

问题描述 投票:0回答:1

好吧,我知道有很多关于此问题的类似线程,但我还没有找到可以解决我的问题的线程。我已经被这个问题困扰好几天了。

一些背景知识,我的应用程序将读取和写入名为“data.xlsx”的 Excel 文件,该文件将存储在 Documents/GRC 文件夹中。该目录的完整路径如下:

val ourAppFileDirectory =
        File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "GRC")

在 API 32 上,我的应用程序工作得很好,但从 API 33 开始,它将把我的 MANAGE_EXTERNAL_DIRECTORY 权限视为完全拒绝,我什至无法从设置中启用它。

我尝试记录我的应用程序,似乎它可以很好地检测到该文件存在,但它根本无法读取它。

val excelFile = File(ourAppFileDirectory, "data.xlsx")
Log.d("Check Existence", excelFile.exists().toString())
Log.d("Check Readability", excelFile.canRead().toString())
return !excelFile.exists()

以下是 logcat 的输出:

我了解 API 33 中的行为发生了变化,因此我们需要使用 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO 或 READ_MEDIA_AUDIO。但没有读取文档类型数据的新权限。

我的应用程序似乎能够在应用程序“内部”创建 Excel 文件。唯一的问题是当我想读取“外国”Excel 文件时。有谁知道这个问题的解决方法,或者 API 33 中 MANAGE_EXTERNAL_STORAGE 权限的任何替代品?

提前谢谢您。

android apache-poi android-permissions scoped-storage android-api-33
1个回答
0
投票

我也有同样的问题。我在意图中使用了 ACTION_OPEN_DOCUMENT ,在 onActivityResult 中我使用输入流将文件的原始副本保存到应用程序的内部存储中。现在我可以对文件的副本执行任何我想要的操作,因为它位于我的应用程序的存储中。您不需要任何许可即可使用此解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.