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

Moh*_*mir 24 java android android-studio

我正在开发一个应用程序。我将不同的文件类型(例如 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" />
Run Code Online (Sandbox Code Playgroud)

对于 Android 10 我也使用了这个属性

android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)

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

java.io.FileNotFoundException:/storage/emulated/0/WhatsApp/Media/WhatsApp Documents/api.txt:打开失败:EACCES(权限被拒绝)

Meh*_*hdi 8

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

以及公共目录中的一般媒体。

尝试列出该 Whatsapp 目录中的文件,您会发现它们未列出。

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

让用户通过 ACTION_OPEN_DOCUMENT 选择文件。在清单中请求 MANAGE_EXTERNAL_STORAGE 并让用户确认。

普通请求不适用于 MANAGE_EXTERNAL_STORAGE 权限。此权限必须由用户在 Android 设置中设置。 在此输入图像描述


kur*_*uro 6

对于 Android 11 或更高版本,请在 Activity 的 onCreate() 上使用以下代码。它将运行一次并请求许可。

        if (Build.VERSION.SDK_INT >= 30){
        if (!Environment.isExternalStorageManager()){
            Intent getpermission = new Intent();
            getpermission.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            startActivity(getpermission);
        }
    }
    
Run Code Online (Sandbox Code Playgroud)

接下来在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。

但是,此方法的问题是,如果您没有充分的理由说明为什么需要访问所有文件,则无法将其上传到 Play 商店。


Sye*_*ain 5

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

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

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

  • android:preserveLegacyExternalStorage 对我不起作用,仍然崩溃:/storage/emulated/0/Download/r32r32r.txt:打开失败:EACCES(权限被拒绝) (2认同)

bla*_*pps 2

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

以及公共目录中的一般媒体。

尝试列出该 Whatsapp 目录中的文件,您会发现它们未列出。

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

  1. 让用户通过 ACTION_OPEN_DOCUMENT 选择文件。
  2. 在清单中请求 MANAGE_EXTERNAL_STORAGE 并让用户确认。