先判断android版本
android手机版本10以上获取文件列表 只给文件存储权限高版本获取不到文件列表,需要申请所有文件访问权;
1.在AndroidManifest.xml添加4个权限;细化的媒体权限。
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
2.在AndroidManifest.xml的application标签里添加下面代码
<application android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:usesCleartextTraffic="true">
3.判断版本及跳转到手机所有文件访问权限页
// 判断高版本是否已有操作所有文件的权限
Environment.isExternalStorageManager()
// 判断手机是不是高版本
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 先判断有没有权限
if (Environment.isExternalStorageManager()) {
// 已经有权限可以直接获取文件列表
System.out.println("自动获取权限Environment");
} else {
//跳转到设置界面引导用户打开
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + cordova.getActivity().getPackageName()));
cordova.getActivity().startActivityForResult(intent, REQUEST_CODE);
}
} else {
System.out.println("低版本获取权限");
}
获取文件列表
所有文件列表
ContentResolver cr = cordova.getActivity().getContentResolver();
Uri uri = MediaStore.Files.getContentUri("external");
String[] projection = null;
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_NONE;
String[] selectionArgs = null;
String sortOrder = null;
Cursor allNonMediaFiles = cr.query(uri, projection, selection, selectionArgs, sortOrder);
pdf文件列表
private void pdfFiles() {
ContentResolver cr = cordova.getActivity().getContentResolver();
Uri uri = MediaStore.Files.getContentUri("external");
String[] projection = null;
String sortOrder = null; // unordered
String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
System.out.println(mimeType);
String[] selectionArgsPdf = new String[]{mimeType};
Cursor cursor = cr.query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder);
if (cursor != null && cursor.getCount() != 0) {
cursor.moveToFirst();
do {
JSONObject params = new JSONObject();
int dataColumn = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
String filePath=cursor.getString(dataColumn); // 文件路径
String fileName = getFileNameWithSuffix(filePath);//文件名称
System.out.println(fileName);
System.out.println(getAutoFileOrFilesSize(filePath));
} while (cursor.moveToNext());
}
System.out.println(list);
if (cursor != null && !cursor.isClosed()) {
System.out.println("end");
cursor.close();
}
}
// 路径截取图片名称
public String getFileNameWithSuffix(String path) {
if(TextUtils.isEmpty(path)){
return "";
}
int start = path.lastIndexOf("/");
if (start != -1 ) {
return path.substring(start + 1);
} else {
return "";
}
}
效果图
关于文件的的大小计算