cómo obtener todos los archivos de audio de la tarjeta sd Android

Quiero escribir una clase que obtiene todos los archivos mp3 de toda la tarjeta sd. Pero en realidad sólo obtiene los archivos de audio que se colocan directamente en la tarjeta sd. así que no busca a través de sub carpetas. Me gustaría usar Mediastore pero no lo consigo a un arraylist. Tal vez usted puede ayudarme, muchas gracias y lo siento por ser un noob;) vinzenz

import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.HashMap; import de.me.musicplayer.SongsManager.FileExtensionFilter; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; public class SongsManager { final String MEDIA_PATH = new String("/sdcard/"); 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")); } } } 

 final String MEDIA_PATH = Environment.getExternalStorageDirectory() .getPath() + "/"; private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); private String mp3Pattern = ".mp3"; // Constructor public SongsManager() { } /** * Function to read all mp3 files and store the details in * ArrayList * */ public ArrayList<HashMap<String, String>> getPlayList() { System.out.println(MEDIA_PATH); if (MEDIA_PATH != null) { File home = new File(MEDIA_PATH); File[] listFiles = home.listFiles(); if (listFiles != null && listFiles.length > 0) { for (File file : listFiles) { System.out.println(file.getAbsolutePath()); if (file.isDirectory()) { scanDirectory(file); } else { addSongToList(file); } } } } // return songs list array return songsList; } private void scanDirectory(File directory) { if (directory != null) { File[] listFiles = directory.listFiles(); if (listFiles != null && listFiles.length > 0) { for (File file : listFiles) { if (file.isDirectory()) { scanDirectory(file); } else { addSongToList(file); } } } } } private void addSongToList(File song) { if (song.getName().endsWith(mp3Pattern)) { HashMap<String, String> songMap = new HashMap<String, String>(); songMap.put("songTitle", song.getName().substring(0, (song.getName().length() - 4))); songMap.put("songPath", song.getPath()); // Adding each song to SongList songsList.add(songMap); } } 

También puedes buscar usando la clase ContentResolver que he hecho así y funciona bien

 public void getSongListFromStorage() { //retrieve song info ContentResolver musicResolver = getContentResolver(); Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); if (musicCursor != null && musicCursor.moveToFirst()) { //get columns int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); //add songs to list do { long thisId = musicCursor.getLong(idColumn); String thisTitle = musicCursor.getString(titleColumn); String thisArtist = musicCursor.getString(artistColumn); songList.add(new Song(thisId, thisTitle, thisArtist)); } while (musicCursor.moveToNext()); } } 

Este código le dará un arrayList de hash mapa que el contenido del título de la canción, así como el camino absoluto canción

 public ArrayList<HashMap<String, String>> getAudioList() { ArrayList<HashMap<String, String>> mSongsList = new ArrayList<HashMap<String, String>>(); Cursor mCursor = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA }, null, null, null); int count = mCursor.getCount(); System.out.println("total no of songs are=" + count); HashMap<String, String> songMap; while (mCursor.moveToNext()) { songMap = new HashMap<String, String>(); songMap.put("songTitle",mCursor.getString(mCursor .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))); songMap.put("songPath", mCursor.getString(mCursor .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA))); mSongsList.add(songMap); } mCursor.close(); return mSongsList; } 
 private void getallaudio() { String[] STAR = { "*" }; controller.audioWrapper.clear(); Cursor audioCursor = ((Activity) cntx).managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, STAR, null, null, null); if (audioCursor != null) { if (audioCursor.moveToFirst()) { do { String path = audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.Media.DATA)); audioWrapper.add(new MediaWrapper(new File(path).getName(), path, "Audio",false)); // Log.i("Audio Path",path); }while (audioCursor.moveToNext()); } // audioCursor.close(); } } 
  • Cuando toma la foto get - java.lang.Throwable: file: // Uri expuesto a través de ClipData.Item.getUri ()
  • ¿Cómo consultar canciones en listas de reproducción en Android SDK?
  • Filtra un managedQuery por extensión de archivo (o, alternativamente, tipo de archivo) para un Cursor de Android
  • Consultar el MediaStore: Unir miniaturas e imágenes (en ID)
  • Android: cómo obtener una miniatura de vídeo de un archivo privado para su aplicación?
  • Cómo actualizar MediaStore de Android al eliminar fotos
  • Android Eclipse Consultar miniaturas de imágenes almacenadas fuera de la galería
  • ¿Cuál es la mejor manera de elegir un video en Android?
  • MediaStore - Uri para consultar todos los tipos de archivos (medios y no medios)
  • ¿Cuál es la diferencia entre el título y el nombre para mostrar
  • ¿Cómo puedo mostrar una carpeta específica en Android Gallery3D (cooliris)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.