2011-12-14 13 views
8

Sé cómo recuperar el género de una canción en particular, (vea getting the genres), pero quiero recuperar todas las canciones de un género en particular. Como "género" no parece ser una de las columnas de un elemento multimedia, no sé cómo hacerlo en una sola consulta, a diferencia de artista o álbum. ¿Hay un método eficiente? Gracias!Android Mediastore: ¿Cómo recuperar eficientemente todas las canciones de un cierto género?

+0

A menos que la lista de música es monstruosa (30k canciones +), no creo sufrirás mucho de una penalización de rendimiento simplemente obteniendo todas las canciones, luego verificando el género y agregando el correcto a la lista. – AedonEtLIRA

+0

Tengo 2K canciones, y toma lo suficiente como para querer poner un diálogo de progreso, incluso con mi Samsung Charge moderadamente rápido. Es muy lento en mi tableta cheapo de 600MHz (por alguna razón, más del doble de lenta). Eso es lo que haré si es necesario, pero esperaba que hubiera un truco que me faltaba. – MBro

Respuesta

1

Puede hacerlo reuniendo un URI de contenido y consultando MediaStore. Aquí hay un código tomado del reproductor de música Android:

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

Este es el código en 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

¿Podría agregar algo de texto explicando lo que ha hecho aquí tal vez? – Flexo

+0

Audio.Genres.Members.getContentUri ("external", genreID) crea uri, like (content: // media/externo/audio/genres/2/members) donde "externo" significa, que buscaremos a través de contenido externo, y "2" es la identificación de género. ContentResolver.query (...) consulta el uri dado y devuelve un Cursor sobre el conjunto de resultados. –

+0

@AlexanderMikhalevich pueden ayudarme por favor para este http://stackoverflow.com/questions/25235127/cleanest-method-to-play-songs-from-album-artist-genre-in-android –

Cuestiones relacionadas