android 11 原生 读取文件权限
时间: 2024-09-30 17:04:43 浏览: 19
在Android 11 (API level 30)及更高版本中,由于隐私和安全性的提升,获取读取文件的权限变得更为严格。如果你的应用想要访问用户设备上的文件,你需要遵守以下步骤:
1. **运行时请求权限**:自Android 6.0 (API level 23)引入了运行时权限机制,不再像以前那样在安装时一次性授予所有权限。对于读取文件权限,需要在用户首次尝试访问敏感文件时动态请求。
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
FILE_PERMISSION_REQUEST_CODE);
}
```
2. **处理用户响应**:用户可能会接受、拒绝或从未显示过这个请求。你需要在`onRequestPermissionsResult()`方法中处理用户的决策。
3. **添加`<uses-permission>`标签到`AndroidManifest.xml`**:尽管运行时请求权限,但在`AndroidManifest.xml`中仍然需要声明对存储权限的需求,只是不需要标记为`android:required="true"`,默认就是非必需的。
```xml
<manifest>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
```
4. **注意权限管理的变化**:Android 11引入了一个新的API `MediaStore`,可以提供更细粒度的媒体文件访问。如果应用只处理媒体文件,可能可以使用`MediaStore`代替传统的文件系统访问。