Android 11 中文件存储(FileNotFoundException open failed: EPERM (Operation not permitted))
使用之前的方式进行文件存储会得到如下错误FileNotFoundException open failed: EPERM (Operation not permitted)就是无法获取文件路径了推荐在Android11及以上版本使用Storage Access Framework (SAF)操作文件注意,只可以在Android11及以上版本中使用/*** Android 11 及以上选择文件导出*
·
使用之前的方式进行文件存储会得到如下错误
FileNotFoundException open failed: EPERM (Operation not permitted)
就是无法获取文件路径了
推荐在Android11及以上版本使用Storage Access Framework (SAF)
操作文件
注意,只可以在Android11及以上版本中使用
/**
* Android 11 及以上选择文件导出
*/
private static final int REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT = 5;
/**
* 文件后缀
*/
private static final String POSTFIX = ".xlsx";
...
/**
* Android11及以上文件选择
*/
private void android11OrHigherFileSelect() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/xlsx");
// 设置默认文件名
String time = TimeUtils.date2String(new Date(), "yyyy-MM-dd HH:mm:ss");
intent.putExtra(Intent.EXTRA_TITLE, "新文件" + time + POSTFIX);
// 用户进行文件存储位置选择
startActivityForResult(intent, REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
// 通过Uri进行文件处理
if (requestCode == REQUEST_CODE_ANDROID_11_OR_HIGHER_FILE_SELECT_FOR_OUTPUT) {
Uri uri = data.getData();
// 柯基的工具类
File file = com.blankj.utilcode.util.UriUtils.uri2File(uri);
// 进行写文件...
doDataOutput(file.getPath());
}
}
}
更多推荐
所有评论(0)