Android 11 打开失败:EACCES(权限被拒绝)

2022-09-03 02:58:39

我正在开发一个应用程序。在其中,我将不同的文件类型(例如.docx,pdf,zip)上传到WAMP服务器。以下是我的内部存储的文件路径。

/storage/emulated/0/WhatsApp/Media/WhatsApp Documents/api.txt

我已经在清单文件中添加并允许存储权限,并在运行时添加并允许读取文件的权限。但是,没有可用的内部存储权限请求。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

对于Android 10,我也使用此属性

android:requestLegacyExternalStorage="true"

但是当我在从内部存储读取文件以进行上传时,我在Android 11操作系统(又名Android R)上收到此错误 三星Galaxy。

java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Documents/api.txt: open failed: EACCES (Permission denyed)


答案 1

您可以尝试在应用程序标记的清单文件中使用标记。此标签用于访问Android 11设备中的存储。有关更多详细信息,请点击此链接,它将根据您的要求向您解释更多内容。android:preserveLegacyExternalStorage="true"

我搜索了很多时间,并获得了添加到清单文件中的解决方案,并尝试在Android 11手机中获取文件访问权限。然后,您将打开并从存储中读取文件。<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

但问题是,Play商店不允许您在应用程序中使用该权限,需要一些时间才能使开发人员能够使用它来访问所有文件。这里的链接是MANAGE_EXTERNAL_STORAGE


答案 2

在 Android 11 设备上,您的应用只能访问自己的文件。

并在公共目录中进行一般媒体。

尝试列出该whatsapp目录中的文件,您将看到它们未列出。

您有两个选项来读取该文件。

  1. 让用户选取具有ACTION_OPEN_DOCUMENT的文件。
  2. 请求清单中的MANAGE_EXTERNAL_STORAGE,并让用户确认。

推荐