Как получить Uri всех PDF-файлов с именем файла из внешнего хранилища в Android 10 с использованием Java

#file #android-cursor #mediastore #android-10.0 #android-external-storage

#файл #android-курсор #mediastore #android-10.0 #android-external-storage

Вопрос:

Я пытаюсь перечислить все PDF-файлы из внешнего хранилища, созданного приложением. Как вывести список PDF-файлов в приложении после перебора курсора?

 private void getExternalPDFFiles() {

    ContentResolver cr = getContentResolver();
    Uri uri = MediaStore.Files.getContentUri("external");

    // every column, although that is huge waste, you probably need
    // BaseColumns.DATA (the path) only.
    String[] projection = null;

    // exclude media files, they would be here also.
    String selection = MediaStore.Files.FileColumns.MEDIA_TYPE   "="
              MediaStore.Files.FileColumns.MEDIA_TYPE;
    String[] selectionArgs = null; // there is no ? in selection so null here

    String sortOrder = null; // unordered
    //        Cursor allNonMediaFiles = cr.query(uri, projection, selection, selectionArgs, sortOrder);


    // only pdf
    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE   "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
    String[] selectionArgsPdf = new String[]{mimeType};
    Cursor cursor = cr.query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder);
    assert cursor != null;
    if (cursor.moveToFirst()) {
        while (!cursor.isAfterLast()) {
            //your code to implement
            Log.d("TAG", cursor.getColumnNames().toString());
            cursor.moveToNext();
        }
    }
    Log.d("TAG", cursor.getCount()   "");
    Log.d("TAG", cursor.getColumnCount()   "");
    cursor.close();

}
  

Ответ №1:

Получить список всех файлов с Uri и именем файла в Android-10 и выше:

 class FileModel {
    String displayName;
    Uri fileUri;

    FileModel(String displayName, Uri fileUri) {
        this.displayName = displayName;
        this.fileUri = fileUri;
    }
}
  

 private ArrayList<FileModel> getExternalPDFFileList() {

    ContentResolver cr = getContentResolver();
    Uri uri = MediaStore.Files.getContentUri("external");

    String[] projection = {MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DISPLAY_NAME};
    String selection = MediaStore.Files.FileColumns.MEDIA_TYPE   "="
              MediaStore.Files.FileColumns.MEDIA_TYPE;
    String[] selectionArgs = null;
    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE   "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
    String[] selectionArgsPdf = new String[]{mimeType};

    Cursor cursor = cr.query(uri, projection, selectionMimeType, selectionArgsPdf, null);

    assert cursor != null;
    ArrayList<FileModel> uriList = new ArrayList<>();
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        int columnIndex = cursor.getColumnIndex(projection[0]);
        long fileId = cursor.getLong(columnIndex);
        Uri fileUri = Uri.parse(uri.toString()   "/"   fileId);
        String displayName = cursor.getString(cursor.getColumnIndex(projection[1]));
        uriList.add(new FileModel(displayName, fileUri));
    }
    cursor.close();
    return uriList;
}