该错误通常表示在调用某个设备时,设备不存在或者无法访问。解决方法如下:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
// Android 10 以下版本
fileUri = Uri.fromFile(file);
} else {
// Android 10 及以上版本
fileUri = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
fileUri = Uri.withAppendedPath(fileUri, file.getName());
}
// 打开文件选择器
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, READ_REQUEST_CODE);
// 处理选择的文件
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == READ_REQUEST_CODE) {
Uri uri = data.getData();
if (uri != null) {
try (InputStream inputStream = getContentResolver().openInputStream(uri)) {
// 处理文件流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
注意:使用 SAF 需要在 AndroidManifest.xml 中注册 provider:
并在在 res/xml 文件夹下添加 file_paths.xml 文件: