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.

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?

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")); } } } 
  • ¿Está segura la manipulación de bytecode?
  • Cómo seguir reproduciendo video mientras cambia a modo horizontal android
  • Retrofit "java.net.ProtocolException: Línea de estado inesperado", ¿Alguien?
  • ¿Cómo burlar el método de Bundle en Android Unit-Test?
  • Clase AutoCompleteTextView & Async
  • Android FinalizerReference con 7mb de RAM
  • La división de una cadena funciona en Java, no funciona en Android
  • Las filas visibles en recyclerview saltan un poco después de girar de retrato a paisaje
  • ¿Cómo puedo manejar excepciones en map () en un Observable en RxJava
  • Impresión arabe de Android usando la impresora cebra imz320 muestra como carácter invertido
  • Android y obtener una vista con id cast como una cadena
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.