在Android Q(Android 10)中,访问外部存储需要进行一些额外的步骤。以下是解决“Android Q - 外部存储 (FileNotFoundException) 访问被拒绝”错误的一种方法,包含代码示例:
android:requestLegacyExternalStorage="true"
private static final int REQUEST_CODE = 101;
// 检查和请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
} else {
// 已经有权限,执行访问外部存储的操作
performExternalStorageOperation();
}
// 权限回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了权限,执行访问外部存储的操作
performExternalStorageOperation();
} else {
// 用户拒绝了权限,处理拒绝权限的逻辑
Toast.makeText(this, "访问外部存储权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}
// 执行访问外部存储的操作
private void performExternalStorageOperation() {
// 在这里执行访问外部存储的操作
// 例如,读取或写入文件等
try {
File file = new File(Environment.getExternalStorageDirectory(), "example.txt");
// 打开文件进行读取或写入操作
// ...
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
通过以上步骤,您应该能够解决“Android Q - 外部存储 (FileNotFoundException) 访问被拒绝”错误,并在Android Q中成功访问外部存储。请注意,从Android 11(API级别30)开始,requestLegacyExternalStorage
属性将不再起作用,因此您可能需要使用其他方法来适配新的存储访问政策。