2015-04-30 3 views
1

В настоящее время я создаю музыкальный браузер/плеер музыки на устройстве. Я успешно заполнил список с именами песен и их исполнителей, но я не могу показать альбом, связанный с этой песней. Я не совсем уверен, что это правильный путь, чтобы получить обложку альбома &, а также о том, как соотнести ее с песнями. Появляется код, но не обложка альбома. Я думаю, что albumArtUri не очень хорошо. Не могли бы вы помочь мне получить правильный альбом Uri?Заполнение списка песен с помощью альбома Art - Невозможно получить обложку альбома

Спасибо за вашу помощь, это оценили :)

Жюльен

Вот мой SongAdapter Код:

using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Util; 
using Android.Views; 
using Android.Widget; 

using Android.Provider; 
using Android.Database; 
using Android.Net; 

namespace project 
{ 
    public class SongsAdapter:CursorAdapter 
    { 
     List<Song> songsList; 
     Activity context; 
     public SongsAdapter (Activity context, ICursor cursor, List<Song> theSongs): base(context,cursor) 
     { 
      this.context = context; 
      songsList = theSongs; 
     } 

    public override void BindView(View view, Context context, ICursor cursor) 
    { 
     var song_title = view.FindViewById<TextView> (Resource.Id.song_title); 
     var song_artist = view.FindViewById<TextView> (Resource.Id.song_artist); 
     var song_album_art = view.FindViewById<ImageView> (Resource.Id.song_album_art); 
     song_title.Text = songsList [cursor.Position].Title; 
     song_artist.Text = songsList [cursor.Position].Artist; 


     //If there is an image to display, it will display it. If not, it will use a default image 
     if (songsList [cursor.Position].AlbumId == null) { 
      song_album_art = view.FindViewById<ImageView> (Resource.Id.song_album_art); 
      song_album_art.SetImageResource (Resource.Drawable.ic_action_user); //Image needs to be set 
     } else { 
      var songUri = ContentUris.WithAppendedId (MediaStore.Audio.Media.ExternalContentUri, songsList [cursor.Position].Id); 
      var albumArtUri = Android.Net.Uri.WithAppendedPath(songUri,MediaStore.Audio.Albums.EntryContentType); 

      song_album_art.SetImageURI (albumArtUri); 
     } 
    } 

    public override View NewView(Context context, ICursor cursor, ViewGroup parent) 
    { 
     return this.context.LayoutInflater.Inflate(Resource.Layout.songslistitem, parent, false); 
    } 
} 
} 

Вот как я называю SongAdapter:

   ListView listView; 
       view = LayoutInflater.From (container.Context).Inflate (Resource.Layout.songlist, container, false); 
       listView = view.FindViewById<ListView> (Resource.Id.List); 

       List<Song> songsList; 

       var uri = MediaStore.Audio.Media.ExternalContentUri; 
       string[] projection = { 
        MediaStore.Audio.Media.InterfaceConsts.Id, 
        MediaStore.Audio.Media.InterfaceConsts.AlbumId, 
        MediaStore.Audio.Media.InterfaceConsts.Title, 
        MediaStore.Audio.Media.InterfaceConsts.Artist, 
       }; 
       var loader = new CursorLoader (container.Context, uri, projection, null, null, null); 
       var cursor = (ICursor)loader.LoadInBackground(); 
       songsList = new List<Song>(); 
       if (cursor.MoveToFirst()) { 
        do { 
         songsList.Add (new Song { 
          Id = cursor.GetLong (cursor.GetColumnIndex (projection [0])), 
          AlbumId = cursor.GetString (cursor.GetColumnIndex (projection [1])), 
          Title = cursor.GetString (cursor.GetColumnIndex (projection [2])), 
          Artist = cursor.GetString (cursor.GetColumnIndex (projection [3])) 
         }); 
        } while (cursor.MoveToNext()); 
       } 

       listView.Adapter = new SongsAdapter (context,cursor,songsList); 

ответ

0

Мне удалось решить мою проблему, выполнив это в адаптере песни:

 long album_id = cursor.GetLong(cursor.GetColumnIndex(MediaStore.Audio.Albums.InterfaceConsts.AlbumId)); 
     var songCover = Android.Net.Uri.Parse ("content://media/external/audio/albumart"); 
     var songAlbumArtUri = ContentUris.WithAppendedId (songCover, album_id); 

     song_artist.Text = songAlbumArtUri.ToString(); 
     song_album_art.SetImageURI (songAlbumArtUri); 

Я нашел ответ благодаря этому StackOverflow ответ: Getting album art from the audio file Uri

Смежные вопросы