2011-12-14 3 views
8

Wiem, jak odzyskać gatunek konkretnej piosenki (zobacz getting the genres), ale chcę odzyskać wszystkie utwory z danego gatunku. Ponieważ "gatunek" nie wydaje się być jedną z kolumn dla elementu multimedialnego, nie wiem jak to zrobić w pojedynczym zapytaniu, w przeciwieństwie do artysty lub albumu. Czy istnieje skuteczna metoda? Thanx!Android Mediastore: Jak skutecznie odzyskać wszystkie utwory z określonego gatunku?

+0

ile lista muzyki jest potworne (30k piosenki +), nie sądzę będziesz cierpieć z powodu dużej kary za wykonanie, po prostu zdobywając wszystkie utwory, następnie sprawdzając gatunek i dodając poprawną do listy. – AedonEtLIRA

+0

Mam 2K piosenek i trwa to wystarczająco długo, aby móc wstawić okno dialogowe postępu, nawet na moim umiarkowanie szybkim ładowaniu Samsung. Jest bardzo wolny na moim tanim tacie 600 MHz (z jakiegoś powodu, ponad dwukrotnie wolniej). Tak zrobię, jeśli będzie to konieczne, ale miałem nadzieję, że brakuje mi jakiejś sztuczki. – MBro

Odpowiedz

1

Możesz to zrobić, łącząc identyfikator URI treści i wysyłając zapytanie do MediaStore. Oto niektóre kodu zapożyczona z Android odtwarzacz muzyczny:

String [] cols = new String [] {MediaStore.Audio.Genres.NAME}; 
Cursor cursor = MusicUtils.query(this, 
       ContentUris.withAppendedId(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, Long.valueOf(mGenre)), 
       cols, null, null, null); 

Jest to kod w MusicUtils:

public static Cursor query(Context context, Uri uri, String[] projection, 
     String selection, String[] selectionArgs, String sortOrder, int limit) { 
    try { 
     ContentResolver resolver = context.getContentResolver(); 
     if (resolver == null) { 
      return null; 
     } 
     if (limit > 0) { 
      uri = uri.buildUpon().appendQueryParameter("limit", "" + limit).build(); 
     } 
     return resolver.query(uri, projection, selection, selectionArgs, sortOrder); 
    } catch (UnsupportedOperationException ex) { 
     ErrorReporter.getInstance().putCustomData("UnsupportedOperationException", "true"); 
     return null; 
    } 

} 
13
Uri uri = Audio.Genres.Members.getContentUri("external", genreID); 

String[] projection = new String[]{Audio.Media.TITLE, Audio.Media._ID}; 

Cursor cur = contentResolver.query(uri, projection, null, null, null); 
+0

Czy możesz dodać tekst wyjaśniający, co tu zrobiłeś? – Flexo

+0

Audio.Genres.Members.getContentUri ("external", genreID) sprawia, że ​​uri, jak (content: // media/external/audio/genres/2/members), gdzie "zewnętrzny" oznacza, że ​​przeszukujemy treści zewnętrzne, a "2" to identyfikator gatunku. ContentResolver.query (...) przeszukuje podany uri i zwraca kursor w zestawie wyników. –

+0

@AlexanderMikhalevich możesz mi pomóc na ten http://stackoverflow.com/questions/25235127/cleanest-method-to-play-songs-from-album-artist-gen-and-android –