如何在android中播放内部和外部SD卡的mp3文件?

我正在开发一个MP3播放器应用程序,它可以在内部SD卡内的任何位置播放.mp3文件。

我使用以下代码来获取内部存储中存在的.mp3文件。

ArrayList inFiles = new ArrayList(); 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()); } } } 

我如何同样从外部SD卡获取.mp3文件?

试着用这个:

 File root = Environment.getExternalStorageDirectory(); 

这将使您获得外部存储的根,只要有一个。 然后,您可以筛选出不是.mp3的文件

还要考虑一下: 在Android设备上列出所有一种文件类型?

您可以使用此代码行获取外部SD卡的根目录

 File root = Environment.getExternalStorageDirectory(); 

现在你可以做与内部相同的事情

 ArrayList inFiles = new ArrayList(); 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()); } } } 

要获取对位于以下位置的文件的引用: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> songsList = new ArrayList>(); private String mp3Pattern = ".mp3"; // Constructor public SongsManager(){ } /** * Function to read all mp3 files from sdcard * and store the details in ArrayList * */ public ArrayList> 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 songMap = new HashMap(); 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")); } } } 

对Tushar Gupta代码的略微修改。 这对我来说很好。 我有完整的音乐播放器代码

 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> songsList = new ArrayList>(); private String mp3Pattern = ".mp3"; // Constructor public SongsManager(){ } /** * Function to read all mp3 files from sdcard * and store the details in ArrayList * */ public ArrayList> 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 songMap = new HashMap(); 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")); } } }