MediaStore - Uri для запроса всех типов файлов (носителей и носителей)

В классе MediaStore.Files его упоминалось, что

Таблица поставщика мультимедиа, содержащая индекс всех файлов в медиа-хранилище, включая файлы мультимедиа.

Мне интересны запросы для не-мультимедийных файлов, таких как PDF.

Я использую CursorLoader для запроса базы данных. Второй параметр для конструктора требует аргумента Uri, который легко получить для типов носителей Audio, Images и Video, поскольку каждый из них имеет константу EXTERNAL_CONTENT_URI и INTERNAL_CONTENT_URI, определенную для них.

Для MediaStore.Files нет такой определенной константы. Я попытался использовать метод getContentUri(), но не смог определить значение аргумента для volumeName. Я попытался дать "/mnt/sdcard", а также имя тома, которое появляется, когда я подключаю устройство к моей системе, но тщетно.

Я видел аналогичный вопрос в Google Groups, но это не разрешено.

EDIT: я также попытался использовать Uri.fromFile(новый файл ( "/mnt/sdcard/" )) и Uri.parse(новый файл ( "/mnt/sdcard" ). toString()), но это не выработайте также.

Ответы

Ответ 1

Это "external" или "internal", хотя внутренние (системные файлы), вероятно, не полезны здесь.

ContentResolver cr = context.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_NONE;
String[] selectionArgs = null; // there is no ? in selection so null here

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

Если вы хотите .pdf, вы можете проверить тип mimetype

// only pdf
String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
String[] selectionArgsPdf = new String[]{ mimeType };
Cursor allPdfFiles = cr.query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder);