Cómo reproducir archivos mp3 de la tarjeta SD interna y externa en android?
Estoy trabajando en una aplicación de reproductor de mp3, que reproduce archivos .mp3 presente en cualquier lugar dentro de una tarjeta SD interna.
He utilizado los códigos siguientes para buscar los archivos .mp3 presentes en el almacenamiento interno.
- ¿Cómo mantener la conexión HttpClient Keep-Alive?
- Android Horizontal LinearLayout - Envolver elementos
- Android FragmentActivity devuelve null en getActionBar ()
- Biblioteca nativa de Android que se enlaza con otra biblioteca nativa desde aar
- Proyecto Android que hace referencia al proyecto "normal" de java en eclipse desde la actualización de las herramientas sdk 17
ArrayList<File> inFiles = new ArrayList<File>(); File list[] = file.listFiles(); //Log.i("DIR", "PATH" +file.getPath()); for (int i = 0; i < list.length; i++) { // myList.add( list[i].getName() ); File temp_file = new File(file.getAbsolutePath(),list[i].getName()); //Log.i("DIR", "PATH" +temp_file.getAbsolutePath()); if (temp_file.listFiles() != null) { //Log.i("inside", "call fn"); listfiles(temp_file); } else { if (list[i].getName().toLowerCase().contains(".mp3")) { inFiles.add(list[i]); //Log.e("Music", list[i].getName()); } } }
¿Cómo obtengo de manera similar los archivos .mp3 de la tarjeta SD externa también?
- Android Bottom White Stripe al rellenar contenido Webview
- AscyncTask - No en el hilo principal
- ¿Cómo comprobar si el paquete existe desde dentro del procesador de anotación (en tiempo de compilación)?
- NullPointerException al mostrar un ViewPager una segunda vez
- Mantenga el elemento de lista highlite con SimpleCursorAdapter
- Activar / desactivar mediante programación modo inmersivo
- Android - Recurso esperado del tipo ID
- Envío de mensajes (notificación) a un grupo - Android
Intentando usar esto:
File root = Environment.getExternalStorageDirectory();
Eso le dará la raíz del almacenamiento externo, siempre que haya uno. A continuación, puede filtrar archivos que no son .mp3
También considere mirar esto: ¿ Lista de todo el tipo de archivo en el dispositivo Android?
Puede obtener el directorio raíz de la tarjeta SD externa utilizando este código de línea
File root = Environment.getExternalStorageDirectory();
Ahora puede hacer lo mismo que hace
ArrayList<File> inFiles = new ArrayList<File>(); File list[] = root.listFiles(); // here use the root object of File class to the list of files and directory from the external storage //Log.i("DIR", "PATH" +file.getPath()); for (int i = 0; i < list.length; i++) { // myList.add( list[i].getName() ); File temp_file = new File(file.getAbsolutePath(),list[i].getName()); //Log.i("DIR", "PATH" +temp_file.getAbsolutePath()); if (temp_file.listFiles() != null) { //Log.i("inside", "call fn"); listfiles(temp_file); } else { if (list[i].getName().toLowerCase().contains(".mp3")) { inFiles.add(list[i]); //Log.e("Music", list[i].getName()); } } }
Para obtener una referencia a un archivo ubicado en: sdcard / music / song.mp3:
File file = Environment.getExternalStorageDirectory()+"/music/song.mp3";
import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.HashMap; enter code here import android.os.Environment; public class SongsManager { 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 from sdcard * 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); } } /** * 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")); } } }
Una ligera modificación a los códigos de Tushar Gupta. Esto funcionó bien para mí. Tengo código completo para un reproductor de música
import android.os.Environment; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.HashMap; public class SongsManager { 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 from sdcard * 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); } } /** * 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")); } } }
- OnCreateView no se llama con Fragment en ViewPager
- GZIPInputStream falla con IOException en Android 2.3, pero funciona bien en todas las versiones anteriores?