android获取手机上的pdf文件列表

263 阅读1分钟

先判断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 "";
      }
    }
        

效果图

WechatIMG258.jpeg

关于文件的的大小计算