2012-07-29 9 views
5

Conozco el URI de una sola canción. ¿Cómo obtengo la información de la canción, la pista del título, etc.Android Cómo obtener la información de identificación de una canción de un URI conocido

Disculpe todas las publicaciones que puedo encontrar proporcionan un método para indexar toda la biblioteca, no cómo obtener una sola información de la canción URI. Esto es lo que estoy usando para obtener el URI. audioID se está almacenando en una SharedPrefs. Gracias

int REQUEST_MEDIA = 0; 
String audioID; 

Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, REQUEST_MEDIA);//REQUEST_MEDIA is some const int to operate with in onActivityResult 
if (requestCode == REQUEST_MEDIA && resultCode == RESULT_OK) { 
     audioID = data.getDataString(); 

Respuesta

5

Respondí a mi propia pregunta, espero que esto ayude a alguien más en el futuro.

int REQUEST_MEDIA = 0; 


SharedPreferences prefs; 
String prefName = "MyPref"; 
String audioID, artist_name, artist_band; 
Uri MyUri; 



private OnClickListener startListener = new OnClickListener() { 
    public void onClick(View v) { 
     Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, REQUEST_MEDIA);//REQUEST_MEDIA is some const int to operate with in onActivityResult 

    } 
}; 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_MEDIA && resultCode == RESULT_OK) { 
     audioID = data.getDataString(); 
     MyUri = Uri.parse(audioID); 
     String[] proj = { MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Artists.ARTIST }; 

       Cursor tempCursor = managedQuery(MrUri, 
              proj, null, null, null); 

       tempCursor.moveToFirst(); //reset the cursor 
       int col_index=-1; 
       int numSongs=tempCursor.getCount(); 
       int currentNum=0; 
       do{ 
        col_index = tempCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
        artist_name = tempCursor.getString(col_index); 
        col_index = tempCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST); 
        artist_band = tempCursor.getString(col_index); 
        //do something with artist name here 
        //we can also move into different columns to fetch the other values 

        currentNum++; 
       }while(tempCursor.moveToNext()); 


    prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("alarm_selected", audioID); 
editor.putString("alarm_name", artist_name); 
editor.putString("alarm_band", artist_band); 
editor.commit();  

    } 
} 
+0

Se hizo! Gracias por el seguimiento - – kittka

+0

Gracias, me alegro de poder ayudar. – user1234051

0

Desafortunadamente, la respuesta anterior no me funcionaba bien, sin embargo, descubrí esto para cualquiera que todavía esté buscando.

//Some audio may be explicitly marked as not being music 
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 

String[] projection = { 
    MediaStore.Audio.Media._ID, 
    MediaStore.Audio.Media.ARTIST, 
    MediaStore.Audio.Media.TITLE, 
    MediaStore.Audio.Media.DATA, 
    MediaStore.Audio.Media.DISPLAY_NAME, 
    MediaStore.Audio.Media.DURATION 
}; 

Cursor cursor = this.managedQuery(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    projection, 
    selection, 
    null, 
    null); 

private List<String> songs = new ArrayList<String>(); 
while(cursor.moveToNext()) { 
    songs.add(cursor.getString(0) + "||" 
       + cursor.getString(1) + "||" 
       + cursor.getString(2) + "||" 
       + cursor.getString(3) + "||" 
       + cursor.getString(4) + "||" 
       + cursor.getString(5)); 

    //TO DISPLAY IN LISTVIEW 
    ListView lv = (ListView) findViewById(R.id.song_list); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, songs); 
    lv.setAdapter(adapter); 

    cursor.close(); 

Este código es cortesía de este post right here :-)

+0

Este código parece consultar TODA la música. La pregunta explícitamente solicita el uso de un URI específico. Si crees que este código es apropiado, explícalo, no solo pegues código aleatorio. – Vince

+0

@ Dado que tiene razón, devuelve todos los resultados y no fue aleatorio de ninguna manera. Voy a actualizar para adaptarse mejor a la pregunta de hoy. –

Cuestiones relacionadas