Android歌曲从SD卡获取

ful*_*ror 2 android hashmap filter android-sdcard android-mediaplayer

我从SD卡中取出歌曲并将他放到列表视图中.

我正在使用这种方法.但它花了一些时间,如果路径不同,我没有得到这些数据.

所以, QUE是否有任何有用的脚本显示我所有SD卡的歌曲.如果他们进入目录/歌曲.

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"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

请对此发表评论.

Anu*_*san 5

我曾经将MediaStore用于我的音乐应用程序,这是一种非常有效和正确的方法来检索数据,然后使用ListView显示它.这将检索存储在SD卡上任何文件夹中的任何音乐文件.

    //your database elect statement 
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
    //your projection statement 
    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,
            MediaStore.Audio.Media.ALBUM_ID
    };
    //query 
    cursor = this.managedQuery(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            projection,
            selection,
            null,
            null);


    while(cursor.moveToNext()){
            songs.add(cursor.getString(0));
            songs.add(cursor.getString(1));
            songs.add(cursor.getString(2));
            songs.add(cursor.getString(3));
            songs.add(cursor.getString(4));
            songs.add(cursor.getString(5));
            album_id.add((long) cursor.getFloat(6));
    } 
    int a[]= new int[]{R.id.textView1 ,R.id.textView3};//, R.id.textview2};
    ListAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.items, cursor, new String[]{MediaStore.Audio.Media.TITLE,           MediaStore.Audio.Media.ARTIST/*, MediaStore.Audio.Media.DURATION*/} ,a);
            setListAdapter(adapter); 
}
Run Code Online (Sandbox Code Playgroud)