Android如何正确申请访问"/storage/emulated/0/"的权限?
时间: 2024-10-07 09:06:11 浏览: 270
在Android中,为了正确申请访问外部存储(如`/storage/emulated/0/`)的权限,你需要遵循以下步骤:
1. **添加权限至Manifest.xml**:
在应用的`<manifest>`标签内添加读取(`android.permission.READ_EXTERNAL_STORAGE`)和写入(`android.permission.WRITE_EXTERNAL_STORAGE`)权限,例如:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. **运行Android 6.0及以后版本(API级别23及以上)**:
自Android 6.0 (API level 23)起,Google引入了运行时权限机制,你需要在代码里动态请求权限。如果你的应用需要在新版本运行,需在运行时请求。
- 使用`ActivityCompat.requestPermissions()`方法:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_READ_EXTERNAL_STORAGE);
}
```
同样,替换`READ_EXTERNAL_STORAGE`为`WRITE_EXTERNAL_STORAGE`如果需要写入权限,并定义一个常量(如`REQUEST_WRITE_EXTERNAL_STORAGE`)作为请求标识符。
3. **处理用户许可结果**:
当用户授权后,你可以在`onRequestPermissionsResult()`方法中检查权限状态并相应地操作:
```java
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_READ_EXTERNAL_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户同意,可以访问外部存储
} else {
// 拒绝或权限未授予,提示用户
}
break;
}
// 其他权限...
}
}
```
4. **注意权限管理生命周期**:
记得在不再需要权限时将其从Manifest文件移除,或者在设备系统更新时提醒用户更新权限,因为旧版权限可能会被撤销。
阅读全文