如何从我的 Android 应用程序中的所有目录中获取所有 pdf 文件

问题描述

我想知道如何从内部存储中获取所有 PDF 文件文件可以在任何目录中,例如有些在 DCIM 文件夹中,有些在 Downloads 文件夹中,等等。

注意:我使用的是 Android Studio(语言:Java)。

解决方法

您可以使用 MediaStore 获取所有 PDF 文件,这是如何获取所有 PDF 文件的示例:

   protected ArrayList<String> getPdfList() {
    ArrayList<String> pdfList = new ArrayList<>();
    Uri collection;

    final String[] projection = new String[]{
            MediaStore.Files.FileColumns.DISPLAY_NAME,MediaStore.Files.FileColumns.DATE_ADDED,MediaStore.Files.FileColumns.DATA,MediaStore.Files.FileColumns.MIME_TYPE,};

    final String sortOrder = MediaStore.Files.FileColumns.DATE_ADDED + " DESC";

    final String selection = MediaStore.Files.FileColumns.MIME_TYPE + " = ?";

    final String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
    final String[] selectionArgs = new String[]{mimeType};

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        collection = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL);
    }else{
        collection = MediaStore.Files.getContentUri("external");
    }


    try (Cursor cursor = getContentResolver().query(collection,projection,selection,selectionArgs,sortOrder)) {
        assert cursor != null;

        if (cursor.moveToFirst()) {
            int columnData = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
            int columnName = cursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME);
            do {
                pdfList.add((cursor.getString(columnData)));
                Log.d(TAG,"getPdf: " + cursor.getString(columnData));
                //you can get your pdf files
            } while (cursor.moveToNext());
        }
    }
    return pdfList;
}