2012-04-30 6 views
17

W klasie klasa MediaStore.Files, jej wspomnieć, żeMediastore - Uri do kwerendy wszystkich typów plików (media i innych mediów)

multimedia dostawcą tabela zawiera spis wszystkich plików w pamięci multimediów, w tym pliki non-media.

Jestem zainteresowany zapytaniami o pliki multimedialne, takie jak PDF.

Używam CursorLoader do wysyłania zapytań do bazy danych. Drugi parametr dla konstruktora wymaga argumentu Uri, który jest łatwy do uzyskania dla typów multimediów Audio, Obrazy i Wideo, ponieważ każda z nich ma dla nich zdefiniowaną stałą o wartości EXTERNAL_CONTENT_URI i INTERNAL_CONTENT_URI.

Dla MediaStore.Files nie ma zdefiniowanej stałej. Próbowałem użyć metody getContentUri(), ale nie mogłem znaleźć wartości argumentu dla volumeName. Próbowałem podać "/ mnt/sdcard", a także nazwę woluminu, która pojawia się, gdy podłączam urządzenie do mojego systemu, ale na próżno.

Widziałem similar question on Google Groups, ale to nie zostało rozwiązane.

EDYCJA: Próbowałem również przy użyciu Uri.fromFile (nowy plik ("/ mnt/sdcard /")) i Uri.parse (nowy plik ("/ mnt/sdcard"). ToString()), ale to didn ' t wypracować albo.

+0

tylko pliki non-media? Jak w żadnym '.jpg'' .avi' '.mp3' ale tylko' .txt' itp? – zapl

+0

Tak. Tylko pliki non-media. Dla '.jpg',' .avi', itp. Mogę używać klas Audio, Wideo i Obrazy. –

Odpowiedz

34

Jest to "external" lub "internal", chociaż wewnętrzne (pliki systemowe) prawdopodobnie nie są tutaj użyteczne.

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); 

Jeśli chcesz .pdf tylko mógł sprawdzić 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); 
+0

Wielkie dzięki! :) Jak to rozgryzłeś? Szukałem całkiem sporo w Internecie. Znalazłem "zewnętrzny", ale użyłem go jak ten Uri.fromParts ("content", "external", ""), który nie wyszedł. –

+0

Patrząc na kody źródłowe - 'Uri.parse (" content: // media/external/file ")' lub 'Uri.fromParts (" content "," media/external/file ", null)' powinny zrobić to samo – zapl

+0

jest kompatybilny z systemem Android 2.2? + ... –

Powiązane problemy