【问题标题】:How can I get all .pdf files from Internal as well as External storage using MediaStore.Files in Android如何在 Android 中使用 MediaStore.Files 从内部和外部存储中获取所有 .pdf 文件
【发布时间】:2017-08-30 12:49:01
【问题描述】:
  private List<PDFFileDetails> getPdfFilesFromDevice(Context context) {
    List<PDFFileDetails> listOfDirectories = new ArrayList<>();
    ContentResolver cr = context.getContentResolver();
    Uri uriExternal = MediaStore.Files.getContentUri("external");
    Uri uriInternal = MediaStore.Files.getContentUri("internal");

    String[] projection = null;

    String sortOrder = null; // unordered

    // only pdf
    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
    String[] selectionArgsPdf = new String[]{mimeType};

在这里,我从我的内部存储中获取所有 pdf,而不是从外部 sdcard 首先我尝试不使用 sdcard,然后我插入了 sdcard,但没有结果来自 sdcard

    Cursor allPdfFilesCursor = cr.query(uriExternal, projection, selectionMimeType, selectionArgsPdf, sortOrder);
    if (allPdfFilesCursor != null && allPdfFilesCursor.getCount() != 0) {
        allPdfFilesCursor.moveToFirst();
        do {
            int dataColumn = allPdfFilesCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
            String filePath=allPdfFilesCursor.getString(dataColumn);              
        } while (allPdfFilesCursor.moveToNext());
    }

没有来自内部或外部存储的结果

    allPdfFilesCursor = cr.query(uriInternal, projection, selectionMimeType, selectionArgsPdf, sortOrder);
    if (allPdfFilesCursor != null && allPdfFilesCursor.getCount() != 0) {
        allPdfFilesCursor.moveToFirst();
        do {
            int dataColumn = allPdfFilesCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
            String filePath=allPdfFilesCursor.getString(dataColumn);
        } while (allPdfFilesCursor.moveToNext());
    }

    if (allPdfFilesCursor != null && !allPdfFilesCursor.isClosed()) {
        allPdfFilesCursor.close();
    }

    return listOfDirectories;
}

【问题讨论】:

  • 您找到解决方案了吗?如果是这样,请在这里分享。提前致谢

标签: android pdf android-contentprovider mediastore


【解决方案1】:

可能已经晚了,但我终于得到了解决方案,因为你要求多个文件扩展名,如 .doc、pdf、xls。

 String pdf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
    String doc = MimeTypeMap.getSingleton().getMimeTypeFromExtension("doc");
    String docx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("docx");
    String xls = MimeTypeMap.getSingleton().getMimeTypeFromExtension("xls");
    String xlsx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("xlsx");
    String ppt = MimeTypeMap.getSingleton().getMimeTypeFromExtension("ppt");
    String pptx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pptx");
    String txt = MimeTypeMap.getSingleton().getMimeTypeFromExtension("txt");
    String rtx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("rtx");
    String rtf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("rtf");
    String html = MimeTypeMap.getSingleton().getMimeTypeFromExtension("html");

    //Table
    Uri table = MediaStore.Files.getContentUri("external");
    //Column
    String[] column = {MediaStore.Files.FileColumns.DATA};
    //Where
    String where = MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
            +" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?";
    //args
    String[] args = new String[]{pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtx,rtf,html};

    Cursor fileCursor = getActivity().getContentResolver().query(table, column, where, args, null);

    while (fileCursor.moveToNext()) {

    //your code 


    }

【讨论】:

  • 它不适用于某些设备中的 .ppt 扩展文件。媒体商店只选择 pptx 文件而不是 ppt。知道可能是什么原因吗?
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多