【问题标题】:How to get list of all music files from android phone如何从 android 手机获取所有音乐文件的列表
【发布时间】:2017-11-13 06:11:00
【问题描述】:

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

代码

public class SongsManager {

// SDCard Path
  String MEDIA_PATH = new String("/sdcard/Music");
 private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

// Constructor
public SongsManager() {

}

/**
 * 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;
}

class FileExtensionFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3") || name.endsWith(".MP3"));
    }
}

}

【问题讨论】:

    标签: android android-sdcard audio-player android-music-player


    【解决方案1】:

    //通过 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));
    }
    

    【讨论】:

    • 您可以在 SongsManager 类中添加并返回歌曲
    • 感谢您的帮助。
    • 我已经尝试过您的代码,但由于某些原因,某些歌曲的持续时间未正确检索,我无法解释为什么会这样。你能帮忙吗?
    • 代码直接复制自此链接:gist.github.com/novoda/374533
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多