如何从android手机获取所有音乐文件的列表

如何从android手机获取所有音乐文件的列表,android,android-sdcard,audio-player,android-music-player,Android,Android Sdcard,Audio Player,Android Music Player,我创建了一个应用程序,可以扫描手机上的音乐文件。如果我扫描文件夹/sdcard/music,它会扫描音乐文件,但当我写入/sdcard时,它不会扫描mp3文件。它工作得很好。但它在某些设备上不工作,应用程序崩溃可能是因为该路径不在手机上,我该怎么办 代码 公共类歌曲管理器{ //SD卡路径 String MEDIA_PATH=新字符串(“/sdcard/Music”); private ArrayList songsList=new ArrayList(); //建造师 公共歌曲管理器(){ }

我创建了一个应用程序,可以扫描手机上的音乐文件。如果我扫描文件夹/sdcard/music,它会扫描音乐文件,但当我写入/sdcard时,它不会扫描mp3文件。它工作得很好。但它在某些设备上不工作,应用程序崩溃可能是因为该路径不在手机上,我该怎么办

代码

公共类歌曲管理器{
//SD卡路径
String MEDIA_PATH=新字符串(“/sdcard/Music”);
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());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
}
//返回歌曲列表数组
返回歌曲列表;
}
类FileExtensionFilter实现FilenameFilter{
公共布尔接受(文件目录,字符串名称){
return(name.endsWith(“.mp3”)| name.endsWith(“.mp3”);
}
}

}

//通过URI检索媒体存储数据库中当前列出的音乐文件列表

//某些音频可能被明确标记为非音乐

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";

String[] projection = {
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.DISPLAY_NAME,
    MediaStore.Audio.Media.DURATION
};

cursor = this.managedQuery(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    projection,
    selection,
    null,
    null);

private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
    songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" +   cursor.getString(2) + "||" +   cursor.getString(3) + "||" +  cursor.getString(4) + "||" +  cursor.getString(5));
}
String selection=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
字符串[]投影={
MediaStore.Audio.Media.\u ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY\u名称,
MediaStore.Audio.Media.DURATION
};
cursor=this.managedQuery(
MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI,
投影,
选择,
无效的
无效);
私有列表歌曲=新建ArrayList();
while(cursor.moveToNext()){
歌曲.add(cursor.getString(0)+“| |”+cursor.getString(1)+“| |”+cursor.getString(2)+“| |”+cursor.getString(3)+“| |”+cursor.getString(4)+“| |”+cursor.getString(5));
}

//通过URI检索媒体存储数据库中当前列出的音乐文件列表

//某些音频可能被明确标记为非音乐

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";

String[] projection = {
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.DISPLAY_NAME,
    MediaStore.Audio.Media.DURATION
};

cursor = this.managedQuery(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    projection,
    selection,
    null,
    null);

private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
    songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" +   cursor.getString(2) + "||" +   cursor.getString(3) + "||" +  cursor.getString(4) + "||" +  cursor.getString(5));
}
String selection=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
字符串[]投影={
MediaStore.Audio.Media.\u ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY\u名称,
MediaStore.Audio.Media.DURATION
};
cursor=this.managedQuery(
MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI,
投影,
选择,
无效的
无效);
私有列表歌曲=新建ArrayList();
while(cursor.moveToNext()){
歌曲.add(cursor.getString(0)+“| |”+cursor.getString(1)+“| |”+cursor.getString(2)+“| |”+cursor.getString(3)+“| |”+cursor.getString(4)+“| |”+cursor.getString(5));
}

您可以添加SongsManager类并返回SongsHanks以获得帮助。我尝试了您的代码,由于某些原因,无法为某些歌曲检索到正确的持续时间,我无法解释原因。你能帮忙吗?代码是直接从这个链接复制的:在Android 11中不起作用。你可以添加你的SongsManager类并返回SongsHanks以获得帮助。我尝试了你的代码,由于某些原因,某些歌曲的持续时间检索不正确,我无法解释原因。你能帮忙吗?代码是直接从这个链接复制的:在Android 11中不工作