Listar toda la música en MediaStore con los PATH

Ok, así que he estado trabajando en este proyecto durante unos días y la mayor parte de mi tiempo ha estado trabajando en la lista de toda la música en un dispositivo en una vista de lista o algo más, he buscado por unos días y ahora esto me está matando. Me puse tan cerca en un punto con toda la música en una carpeta mostrando, aunque como la mayoría de la gente tendrá subcarpetas para cosas como artiest y los álbumes necesito una manera de buscar sub carpetas para MP3 o archivos de música.

Esto es lo que tengo hasta ahora para la colección de música:

package com.androidhive.musicplayer; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.HashMap; import android.provider.MediaStore; public class SongsManager { // SDCard Path final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString()); private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); // Constructor public SongsManager(){ } /** * Function to read all mp3 files from sdcard * and store the details in ArrayList * */ public ArrayList<HashMap<String, String>> getPlayList(){ File home = new File(MEDIA_PATH); if (home.listFiles(new FileExtensionFilter()).length > 0) { for (File file : home.listFiles(new FileExtensionFilter())) { HashMap<String, String> song = new HashMap<String, String>(); song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4))); song.put("songPath", file.getPath()); // Adding each song to SongList songsList.add(song); } } // return songs list array return songsList; } /** * Class to filter files which are having .mp3 extension * */ class FileExtensionFilter implements FilenameFilter { public boolean accept(File dir, String name) { return (name.endsWith(".mp3") || name.endsWith(".MP3")); } } } 

Gracias a cualquiera que pueda ayudar. 🙂

Aunque, el post es viejo, para otras personas como yo para obtener la idea de crear una lista de música con su ruta de archivo, he añadido la solución aquí. MediaStore.Audio.Media.DATA columna MediaStore.Audio.Media.DATA contiene realmente la ruta del archivo multimedia. Puede obtener la información necesaria mediante el siguiente fragmento:

 ContentResolver cr = getActivity().getContentResolver(); Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0"; String sortOrder = MediaStore.Audio.Media.TITLE + " ASC"; Cursor cur = cr.query(uri, null, selection, null, sortOrder); int count = 0; if(cur != null) { count = cur.getCount(); if(count > 0) { while(cur.moveToNext()) { String data = cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA)); // Add code to get more column here // Save to your list here } } } cur.close(); 

Puede listar todos los archivos de música usando este código

 //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 = 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)); } 

No he probado este código, pero parece correcto. Usted estará en el camino correcto con eso.

Estoy trabajando en el mismo proyecto ahora y ya resolvió el problema.

Necesitará una clase personalizada para almacenar sus datos de canciones:

 package YOUR_PACKAGE; public class Songs { private long mSongID; private String mSongTitle; public Songs(long id, String title){ mSongID = id; mSongTitle = title; } public long getSongID(){ return mSongID; } public String getSongTitle(){ return mSongTitle; } } 

Entonces usted tiene que definir ArrayList en la actividad con la vista de lista que usted llenará con datos:

 private ArrayList<Songs> arrayList; 

Y en onCreate:

 arrayList = new ArrayList<Songs>(); 

Entonces tienes que recuperar datos de tu dispositivo:

 public void YOUR_METHOD_NAME(){ ContentResolver contentResolver = getContentResolver(); Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor songCursor = contentResolver.query(songUri, null, null, null, null); if(songCursor != null && songCursor.moveToFirst()) { int songId = songCursor.getColumnIndex(MediaStore.Audio.Media._ID); int songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE); do { long currentId = songCursor.getLong(songId); String currentTitle = songCursor.getString(songTitle); arrayList.add(new Songs(currentId, currentTitle, currentArtist)); } while(songCursor.moveToNext()); } } 

A continuación, llame a este método de onCreate:

 YOUR_METHOD_NAME(); 

Y finalmente tienes que crear una clase de adaptador personalizado, definir este adaptador en onCreate (en actividad con ListView) y configurar este adaptador en tu objeto ListView.

Veo que se le preguntó hace 3 años y el problema creo que ya resuelto, pero tal vez será útil para alguien. Gracias.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.