Android 11 Is:/storage/emulated/ permission denied
时间: 2023-11-02 21:00:23 浏览: 523
根据提供的引用内容,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");
```
怎么在 /storage/emulated/0里获取权限写文件java.io.FileNotFoundException: /storage/emulated/0/MengYuanQing.txt (Permission denied)
在Android应用程序中,如果试图在`/storage/emulated/0`目录下写入文件而遇到`FileNotFoundException: Permission denied`,通常是因为你尚未获得相应的存储权限。在AndroidManifest.xml文件中,你需要添加对读写外部存储的权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_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},
REQUEST_WRITE_EXTERNAL_STORAGE);
}
// 等待用户响应权限请求
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (requestCode == REQUEST_WRITE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 如果权限被授予,尝试写文件
try {
File file = new File("/storage/emulated/0/MengYuanQing.txt");
FileOutputStream fos = new FileOutputStream(file);
// 写入数据...
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 权限未授予,处理不允许的情况
Toast.makeText(this, "存储权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}
```
在这个例子中,`REQUEST_WRITE_EXTERNAL_STORAGE`是一个自定义请求码,用于跟踪用户的权限请求结果。
阅读全文