Listar toda la música en MediaStore con los PATHs

Bien, he estado trabajando en este proyecto durante unos días y la mayor parte de mi tiempo he estado trabajando en cómo hacer una lista de toda la música en un dispositivo en una VISTA DE LISTA o algo más, he buscado unos días ahora y esto me está matando. Me acerqué tanto en un punto con toda la música en una carpeta, aunque, como la mayoría de las personas tendrán subcarpetas para cosas como las más artísticas y los álbumes, necesito una forma de buscar subcarpetas para archivos de música o MP3.

Esto es lo que tengo hasta ahora para la colección de música:

package com.androidhive.musicplayer;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;

import android.provider.MediaStore;

public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString());
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 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"));
    }
}

}

Gracias a cualquiera que pueda ayudar. :)

Respuestas a la pregunta(4)

Su respuesta a la pregunta