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")); } } }
- ¿Por qué MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI no proporciona un "Artista de Álbum" preciso?
- Reproducir canción en el reproductor de música predeterminado - android
- Cómo limitar la duración de MediaStore en Android 7
- Mostrar imagen grande de la tarjeta SD en Android
- ¿Qué es MINI_THUMB_MAGIC y cómo usarlo?
- Android MediaScanner: elimina los archivos de imagen de la galería
- ¿Cómo utilizar la consulta MediaStore para obtener los artistas sin duplicados?
- Android: falla en la imagen de carga de Picasso. Cómo mostrar mensaje de error
- Android MediaStore insertVideo
- Error de URI desconocido en insertImage
- Uso del URI de contenido con ACTION_VIDEO_CAPTURE
- ¿Cómo funciona CursorAdapter en android en GridView?
- Archivos no eliminados al borrar y aún mostrados en Listview
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(); } }
- ¿Cómo hacer que una barra de botones se deslice desde la parte inferior al hacer clic en la casilla de verificación en ListView?
- ¿Cómo puedo almacenar un HashMap <Integer, String> en android usando preferencias compartidas?