Android Q升级了文件系统,访问文件不仅仅是说动态权限了,有各种限制。权限什么的就不赘述了,下面介绍一下在10以上的系统中访问文件。
首先是打开文件管理器
/**
* 打开文件管理器 存储卡和外接U盘都可以访问
*/
public void openFileManager() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/*");
startActivityForResult(intent, REQUEST_CODE_FILE);
}
这个setType可以根据自己的需要,设置MIME类型,设置要访问什么类型的文件。具体MIME可以参考MIME类型-优快云博客
然后会打开文件管理器,这里面可以访问手机存储的文件或者外插U盘内的文件,就根据自己需求选择文件就可以了。
选中的文件会在onActivityResult中返回
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_FILE){
//拿到需要解析的文件
Uri uri = data.getData();
String filePath= FileHelper.getFileAbsolutePath(this,uri);
if (!TextUtils.isEmpty(filePath)){
parseFile = new File(filePath);
binding.tvFileName.setText(parseFile.getName());
readFile();
}
}
}
这里关键的一点就是把拿到的uri转换成filePath了,转换成路径之后就可以读文件,根据需求进行操作了。这个FileHelper转自Android打开系统文件管理器,并获取选中文件的路径,适配Android10及以上无法获取路径_intent.settype获取文件-优快云博客
package com.......utils;
import android.content.ContentResolver;
import android.content.ContentUris;
import