2012-08-17 26 views
5

Estoy trabajando en una aplicación de reproductor de mp3, que reproduce archivos .mp3 presentes en cualquier lugar dentro de una tarjeta SD interna.¿Cómo reproducir archivos mp3 desde la tarjeta SD interna y externa en Android?

He utilizado los siguientes códigos 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 los archivos .mp3 de la tarjeta SD externa también?

Respuesta

1

Tratando de utilizar este:

File root = Environment.getExternalStorageDirectory(); 

que les permite conocer la raíz del almacenamiento externo, siempre que hay una. A continuación, puede filtrar los archivos que no se .mp3

también considerar el mirar de esto: List all of one file type on Android device?

+1

Gracias por la respuesta! "Environment.getExternalStorageDirectory();" obtiene la ruta de almacenamiento interno, pero quiero buscar los archivos .mp3 desde una tarjeta SD externamente extraíble. – Aadi

1

para obtener una referencia a un archivo que se encuentra en: sdcard/música/canción.mp3:

File file = Environment.getExternalStorageDirectory()+"/music/song.mp3"; 
2

usted puede obtener el directorio raíz de la tarjeta sd externa utilizando el código de la línea

File root = Environment.getExternalStorageDirectory(); 

Ahora usted puede hacer lo mismo que lo hace para uso en interior

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()); 
     } 
    } 
} 
+0

¡Gracias por la respuesta! "Environment.getExternalStorageDirectory();" obtiene la ruta de almacenamiento interno, pero quiero buscar los archivos .mp3 desde una tarjeta SD externamente extraíble. – Aadi

1
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")); 
     } 
    } 
} 
+0

Debe explicar la solución en lugar de solo cumbre el código –

+0

El código anterior es para ....... ¿Cómo reproducir archivos mp3 desde una tarjeta SD externa en Android? –

0

una ligera modificación de los códigos de Tushar Gupta. Esto funcionó bien para mí. Tengo el 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")); 
      } 
     } 
    } 
Cuestiones relacionadas