在Android 9.0 Pie及更高版本中,应用程序需要请求运行时权限来访问外部存储。以下是一个解决方案,包含代码示例:
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
// 检查权限是否已授予
public boolean checkStoragePermission() {
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return permission == PackageManager.PERMISSION_GRANTED;
}
// 请求权限
public void requestStoragePermission() {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
}
// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已授予,可以访问外部存储
} else {
// 权限被拒绝,无法访问外部存储
}
}
}
checkStoragePermission()
方法来检查权限是否已授予。如果权限未授予,调用requestStoragePermission()
方法来请求权限。在onRequestPermissionsResult()
方法中处理权限请求结果。请注意,从Android 10(API级别29)开始,存储访问权限已更改为分区存储。可以使用requestLegacyExternalStorage
属性来继续使用旧的外部存储权限模型,但建议迁移到分区存储模型。