2010-04-13 7 views
10

Quiero consultar a los miembros de una lista de reproducción determinada. Tengo la id correcta de la lista de reproducción y quiero usar una managedQuery() para ver los miembros de la lista de reproducción en cuestión.¿A qué se refiere el argumento String 'volumeName' de MediaStore.Audio.Playlists.Members.getContentUri?

Lo que tengo es la siguiente:

private String [] columns = { 
    MediaStore.Audio.Playlists.Members.PLAYLIST_ID, 
    MediaStore.Audio.Playlists.Members.TITLE, 
    }; 
Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri(volume, playlistId); 
Cursor tCursor = managedQuery(membersUri, columns, null, null, null); 

no sé lo que el argumento de volumen tiene que ser. He intentado esto: MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI.toString() para el argumento "volumen".

Eso me da de nuevo un contenido válido URI que se parece a:

content://media/external/audio/playlists/2/members 

Sin embargo, mi cursor vuelve nula. Probablemente estoy fuera de la base, sé que lo que quiero hacer es muy simple.

+0

He reducido las cosas - Creo que "externo" es el argumento que estoy buscando. Me imagino que es porque puedo usar cualquier cadena falsa y obtener el mismo Cursor nulo, pero con el URI externo parece correcto (como arriba, parece que pegué la versión desde cuando usé "externo"). También con "externo", obtengo un comportamiento diferente. Obtengo una NullPointerException cuando llamo a ManageQuery, con un rastro de pila muy poco útil. en android.content.ContentResolver.query (ContentResolver.java:149) en android.app.Activity.managedQuery (Activity.java:1499) – Brett

Respuesta

8

la cadena "externa" funciona como el volumen en MediaStore.Audio.Playlists.Members.getContentUri(volume, playlistId)

Esta actividad imprime las canciones en un androide, y las listas de reproducción y sus contenidos.

import android.app.Activity; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 

public class PlaylistActivity extends Activity { 
    private final String [] STAR= {"*"}; 
    private final String TAG= "list"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 

     Log.i(TAG, "All the titles"); 
     Uri allaudio_uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor ca= managedQuery(allaudio_uri, STAR, null,null,null); 
     for(ca.moveToFirst(); !ca.isAfterLast(); ca.moveToNext()){ 
      if(ca.isFirst()){ // print all the fields of the first song 
       for(int k= 0; k<ca.getColumnCount(); k++) 
        Log.i(TAG, " "+ca.getColumnName(k)+"="+ca.getString(k)); 
      }else{    // but just the titles of the res 
       Log.i(TAG, ca.getString(ca.getColumnIndex("title"))); 
      } 
     } 
     Log.i(TAG, "--------------------------"); 
     Log.i(TAG, "All the playlists"); 
     Uri playlist_uri= MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;  
     Cursor cursor= managedQuery(playlist_uri, STAR, null,null,null); 
     cursor.moveToFirst(); 
     for(int r= 0; r<cursor.getCount(); r++, cursor.moveToNext()){ 
      Log.i(TAG, "-----"); 
      Log.i(TAG, "Playlist " + cursor.getString(cursor.getColumnIndex("name"))); 
      for(int k= 0; k<cursor.getColumnCount(); k++)   
       Log.i(TAG, cursor.getColumnName(k)+"="+cursor.getString(k)); 

      // the members of this playlist 
      int id= cursor.getInt(0); 
      Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri("external", id); 
      Cursor membersCursor = managedQuery(membersUri, STAR, null, null, null); 
      membersCursor.moveToFirst(); 
      for(int s= 0; s<membersCursor.getCount(); s++, membersCursor.moveToNext()) 
       Log.i(TAG, " "+membersCursor.getString(membersCursor.getColumnIndex("title"))); 
      membersCursor.close(); 
     } 
     cursor.close(); 
    } 
} 
+9

Realmente no responde la pregunta. ¿Cuál es el volumen? ¿Cuáles son sus posibles valores además de "externo"? ¿A qué se refiere "externo"? ¿Es lo mismo que el "externo" utilizado en http://developer.android.com/guide/topics/data/data-storage.html? Etc. – Yang

+0

Gracias, exactamente lo que estaba buscando. – Gaurav

Cuestiones relacionadas