public void PopulateSongList(Context context) { SongData songData = new SongData(); Android.Net.Uri musicUri = MediaStore.Audio.Media.ExternalContentUri; //Used to query the media files. ICursor musicCursor = context.ContentResolver.Query(musicUri, null, null, null, null); if (musicCursor != null && musicCursor.MoveToFirst()) { int songID = -1; //get columns. int fileIsMusicColumn = musicCursor.GetColumnIndex("is_music"); int songTitleColumn = musicCursor.GetColumnIndex("title"); int songArtistColumn = musicCursor.GetColumnIndex("artist"); int albumIDColumn = musicCursor.GetColumnIndex("album_id"); int fileURIColumn = musicCursor.GetColumnIndex("_data"); //There is also a is_favorite column. //But I am not using it for this example. //musicCursor.GetColumnNames(); //add songs to the songData list do { //If the current file is a music file. if (musicCursor.GetInt(fileIsMusicColumn) == 1) { string songTitle = musicCursor.GetString(songTitleColumn); string songArtist = musicCursor.GetString(songArtistColumn); Android.Net.Uri fileDir = Android.Net.Uri.Parse(musicCursor.GetString(fileURIColumn)); var test = musicCursor.GetString(fileURIColumn); //We will use this to fetch the song image later. //Store a list of Bitmaps will take up too much space. long albumID = musicCursor.GetLong(albumIDColumn); //If song artist value is not found. if (songArtist == null) { songArtist = "<unknown>"; } songData.AddNewSong(new Song(++songID, songTitle, songArtist, albumID, fileDir)); } }while (musicCursor.MoveToNext()); } }