2012-08-17 13 views
5

Sto lavorando ad un'app per lettore mp3, che riproduce file .mp3 ovunque all'interno di una scheda SD interna.Come riprodurre i file mp3 dalla scheda SD interna ed esterna in Android?

Ho utilizzato i seguenti codici per recuperare i file .mp3 presenti nella memoria interna.

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

Come si ottengono allo stesso modo i file .mp3 dalla scheda SD esterna?

risposta

1

Cercando di utilizzare questo:

File root = Environment.getExternalStorageDirectory(); 

che ti porterà la radice della memorizzazione esterno, a condizione che ci sia uno. Quindi è possibile filtrare i file che non sono .mp3

anche prendere in considerazione guardando questo: List all of one file type on Android device?

+1

Grazie per la risposta! "Environment.getExternalStorageDirectory();" ottiene il percorso di archiviazione interna, ma voglio recuperare i file .mp3 dalla scheda SD esternamente rimovibile. – Aadi

1

per ottenere un riferimento a un file che si trova su: sdcard/musica/song.mp3:

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

È possibile ottenere la directory principale del sdcard esterno utilizzando questo codice di linea

File root = Environment.getExternalStorageDirectory(); 

Ora si può fare la stessa cosa, come si fa per l'uso interno

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

Grazie per la risposta! "Environment.getExternalStorageDirectory();" ottiene il percorso di archiviazione interna, ma voglio recuperare i file .mp3 dalla scheda SD esternamente rimovibile. – 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

Dovrebbe spiegare la soluzione piuttosto che solo sommare il codice –

+0

Il codice sopra è per ....... Come riprodurre file mp3 da scheda SD esterna in Android? –

0

una leggera modifica al Codice di Tushar Gupta. Questo ha funzionato bene per me. Ho il codice completo per un lettore musicale

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")); 
      } 
     } 
    } 
Problemi correlati