Java 如何在SD卡(eclipse、android)上查找所有音频文件

Java 如何在SD卡(eclipse、android)上查找所有音频文件,java,android,eclipse,search,audio,Java,Android,Eclipse,Search,Audio,我已经有了这个代码…但我想通过子文件夹搜索,而不是通过sdcard搜索。对不起,我的英语;) 谢谢你的帮助,文曾兹 public class SongsManager { // SDCard Path final String MEDIA_PATH = new String("/sdcard/"); private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap&

我已经有了这个代码…但我想通过子文件夹搜索,而不是通过sdcard搜索。对不起,我的英语;) 谢谢你的帮助,文曾兹

public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<HashMap<String, String>> songsList = new        ArrayList<HashMap<String, String>>();

// Constructor
public SongsManager(){
    **strong text**
 }

/**
 * Function to read all mp3 files from sdcard
 * and store the details in ArrayList
 * */
public ArrayList<HashMap<String, String>> getPlayList(){
    File home = new File(MEDIA_PATH);

    if (home.listFiles(new FileExtensionFilter()).length > 0) {
        for (File file : home.listFiles(new FileExtensionFilter())) {
            HashMap<String, String> song = new HashMap<String, String>();
            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
            song.put("songPath", file.getPath());

            // Adding each song to SongList
            songsList.add(song);
        }
    }
    // return songs list array
    return songsList;
}
公共类歌曲管理器{
//SD卡路径
最终字符串媒体路径=新字符串(“/sdcard/”);
private ArrayList songsList=new ArrayList();
//建造师
公共歌曲管理器(){
**强文本**
}
/**
*从SD卡读取所有mp3文件的功能
*并将详细信息存储在ArrayList中
* */
公共阵列列表getPlayList(){
文件主目录=新文件(媒体路径);
if(home.listFiles(新文件扩展筛选器()).length>0){
对于(文件:home.listFiles(新的FileExtensionFilter())){
HashMap宋=新HashMap();
song.put(“songTitle”,file.getName().substring(0,(file.getName().length()-4));
put(“songPath”,file.getPath());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
}
//返回歌曲列表数组
返回歌曲列表;
}

}

此代码可能会对您有所帮助。它在SD卡中搜索歌曲(甚至在子文件夹中),并将详细信息存储在
songsList

ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    String[] STAR = { "*" };

    Cursor cursor;
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";


    cursor = managedQuery(uri, STAR, selection, null, null);

    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                String songName = cursor
                        .getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));


                String path = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DATA));


                String albumName = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.ALBUM));
                int albumId = cursor
                        .getInt(cursor
                                .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));

                HashMap<String, String> song = new HashMap<String, String>();
                song.put("songTitle",albumName+" "+songName+"___"+albumId);
                song.put("songPath",path );
                songsList.add(song);

            } while (cursor.moveToNext());


        }

    }
ArrayList songsList=new ArrayList();
字符串[]星={“*”};
光标;
Uri Uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
字符串选择=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
cursor=managedQuery(uri、星形、选择、null、null);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
字符串名称=游标
.getString(游标
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
字符串路径=游标.getString(游标
.getColumnIndex(MediaStore.Audio.Media.DATA));
String albumName=cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int albumId=光标
.getInt(游标
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
HashMap宋=新HashMap();
song.put(“songTitle”,albumName+“”+songName+“”+albumId);
歌曲。放(“歌曲路径”,路径);
歌曲列表。添加(歌曲);
}while(cursor.moveToNext());
}
}

您的问题没有直接的解决方案 您必须编写一段代码来迭代一个目录中的每个文件,如果当前文件是一个目录,则列出该目录中的所有文件,然后再次迭代该目录中的所有文件,依此类推
下面类似的代码将有助于

导入java.io.File;
公共类DirectoryReader{
静态整数spc_计数=-1;
静态无效进程(文件文件){
spc_计数++;
if(aFile.isFile()){
//检查歌曲文件的逻辑
}else if(aFile.isDirectory()){
File[]listOfFiles=aFile.listFiles();
if(listOfFiles!=null){
for(int i=0;i
考虑到介质是从SD卡扫描的,您可以从MediaStore获取此信息

 musiccursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            proj, MediaStore.Audio.Media.MIME_TYPE  + "= audio/mpeg", null, null);

int column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);


while(musiccursor.moveToNext()){

String path = musiccursor.get(column_index);
//path is your music path, use this
}

感谢您提供了一个很好的答案,尽管managedQuery方法已被弃用,但您可以更新此答案吗?您可以使用具有相同参数的getContentResolver().query()代替弃用的managedQuery()。
 musiccursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            proj, MediaStore.Audio.Media.MIME_TYPE  + "= audio/mpeg", null, null);

int column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);


while(musiccursor.moveToNext()){

String path = musiccursor.get(column_index);
//path is your music path, use this
}