vinzzenzz
vinzzenzz

Reputation: 174

How to find all audio files on SDCard (eclipse, android)

i have already this code...but i want to search also trough the sub folders instead of just searching trough sdcard.sorry for my english ;) thanks for helping, vinzenz

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

}

Upvotes: 2

Views: 7210

Answers (3)

nandeesh
nandeesh

Reputation: 24820

Considering that Media is scanned from sdcard, you can get this information from 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
}

Upvotes: 2

S4beR
S4beR

Reputation: 1847

there is no direct solution to your question you have to write a piece of code to iterate through each files in a directory, if current file is a directory then list all files of that directory and iterate again on all file of it and so on.
Something like below code will help as in this thread

import java.io.File;

public class DirectoryReader {

  static int spc_count=-1;

  static void process(File aFile) {
    spc_count++;

    if(aFile.isFile()) {
      // your logic to check songs file
    } else if (aFile.isDirectory()) {

      File[] listOfFiles = aFile.listFiles();
      if(listOfFiles!=null) {
        for (int i = 0; i < listOfFiles.length; i++) {
          process(listOfFiles[i]);
        }
      } else {
        // access is denied
      }
    }

    spc_count--;
  }

  public static void main(String[] args) {
    String nam = "/sdcard/";
    File aFile = new File(nam);
    process(aFile);
  }

}

Upvotes: 0

Abhishek V
Abhishek V

Reputation: 12536

This code might help you. It searches for songs in SD card (even in subfolders) & stores the details in 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());


        }

    }

Upvotes: 5

Related Questions