web-dev-qa-db-ja.com

MediaStore-すべてのタイプのファイル(メディアと非メディア)を照会するUri

クラスで MediaStore.Files クラス、その言及、

非メディアファイルを含む、メディアストレージ内のすべてのファイルのインデックスを含むメディアプロバイダーテーブル。

PDFなどの非メディアファイルのクエリに興味があります。

CursorLoaderを使用してデータベースを照会しています。コンストラクターの2番目のパラメーターには、それぞれに_EXTERNAL_CONTENT_URI_および_INTERNAL_CONTENT_URI_定数が定義されているため、メディアタイプAudio、Images、Videoで簡単に取得できるUri引数が必要です。

MediaStore.Filesの場合、そのような定義済み定数はありません。 getContentUri()メソッドを使用しようとしましたが、volumeNameの引数値がわかりませんでした。 「/ mnt/sdcard」と、デバイスをシステムに接続したときに表示されるボリューム名も無駄にしようとしました。

Googleグループに関する同様の質問 を見ましたが、それは解決していません。

編集:Uri.fromFile(new File( "/ mnt/sdcard /"))およびUri.parse(new File( "/ mnt/sdcard")。toString())も使用しようとしましたが、どちらもうまくいきませんでした。

20

"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あなただけがMIMEタイプを確認できます

// 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);
41
zapl