Android 11 Is:/storage/emulated/ permission denied
时间: 2023-11-02 13:00:23 浏览: 441
根据提供的引用内容,Android 11 在访问 `/storage/emulated/` 目录时可能会面临权限被拒绝的问题。这是由于 Android 11 引入了更严格的存储权限策略所导致的。为了解决这个问题,你可以考虑以下几种方法:
1. 使用新的存储访问框架(Scoped Storage):Android 11 引入了 Scoped Storage,它是一种更安全的存储访问方式。你可以使用新的 API 来访问应用专用目录和共享文件,而不是直接访问 `/storage/emulated/` 目录。这样可以避免权限问题并提高应用的安全性。
2. 请求适当的存储权限:如果你的应用确实需要访问 `/storage/emulated/` 目录,你需要在清单文件中声明适当的权限。在 AndroidManifest.xml 文件中添加以下代码:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
并且在运行时请求权限。你可以使用权限请求 API 来请求用户授权访问存储。
3. 更新应用的目标SDK版本:将应用的 `targetSdkVersion` 更新到 Android 11 或更高版本,以确保应用遵循最新的权限策略。请注意,在更新目标SDK版本后,你可能需要适应新的存储访问方式。
请根据你的需求选择适合你的解决方案,并根据具体情况实施相应的更改。
相关问题
Android Permission to access file: /storage/emulated/0/Download/下载_1.mp3 is denied
您的问题是关于Android权限访问文件的问题。从Android 10.0开始,即使在manifest文件中添加了读写权限,也不能直接访问内部存储路径。这是因为Android 10.0引入了一种新的存储访问框架,称为Scoped Storage。Scoped Storage旨在提高应用程序的数据隐私和安全性,并使应用程序更易于管理存储空间。因此,如果您的应用程序需要访问外部存储器中的文件,您需要请求用户授予您的应用程序访问外部存储器的权限。
以下是一种解决方法:
1.在manifest文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2.在Android 10.0及更高版本中,您还需要在manifest文件中添加以下代码:
```xml
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
```
3.在您的代码中,您需要使用以下代码请求用户授予您的应用程序访问外部存储器的权限:
```java
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
```
4.如果用户授予了您的应用程序访问外部存储器的权限,则可以使用以下代码访问文件:
```java
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "下载_1.mp3");
```
java.io.FileNotFoundException: /storage/emulated/0/Documents/log.txt: open failed: EACCES (Permission denied)
这个错误提示是因为你的应用程序没有权限访问文件系统中的该文件。你需要在应用程序的 AndroidManifest.xml 文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
同时,在代码中,在访问文件之前,需要获取存储权限:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
}
```
此外,还需要注意 Android 10(API 级别 29)及更高版本中的存储访问变更。在这些版本中,应用程序需要使用 Storage Access Framework 或 MediaStore API 访问外部存储。你需要更新你的应用程序以遵循这些变更。
阅读全文