34

MediaStore.Filesクラスのクラスでは、次のように述べています。

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

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

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

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

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

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

4

1 に答える 1

56

内部(システムファイル)はおそらくここでは役に立ちません"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);
于 2012-04-30T13:25:40.340 に答える