如何从设备的内部和外部存储器中获取songart(AlbumArt)?

问题描述:

我正在尝试制作音乐播放器应用程序。如何从设备的内部和外部存储器中获取songart(AlbumArt)?

我想要一个带有歌曲图像和歌名和歌手名字的列表视图。

就是这样。

enter image description here

我已经想通了SONGNAME和SONGTITLE使用内容解析器,但我不知道如何显示歌曲的各自的艺术。

这是我的ListSong.java,它用于从设备获取歌曲。

public class ListSong extends Fragment { 

    private ArrayList<Song> songList; 
    private ListView songView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.listsongs, container, false); 

     songView = (ListView)rootView.findViewById(R.id.songsList); 
     songList = new ArrayList<Song>(); 

     getSongList(); 

     SongAdapter songAdt = new SongAdapter(getActivity(), songList); 
     songView.setAdapter(songAdt); 

     return rootView; 

    } 

    public void getSongList(){ 
     ContentResolver musicResolver = getActivity().getContentResolver(); 
     Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 
     if(musicCursor!=null && musicCursor.moveToFirst()){ 
      //get columns 
      int titleColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.TITLE); 
      int idColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media._ID); 
      int artistColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.ARTIST); 
      //add songs to list 
      do { 
       long thisId = musicCursor.getLong(idColumn); 
       String thisTitle = musicCursor.getString(titleColumn); 
       String thisArtist = musicCursor.getString(artistColumn); 
       songList.add(new Song(thisId, thisTitle, thisArtist)); 
      } 
      while (musicCursor.moveToNext()); 
     } 
    } 

} 

的,这里是我SongInfo(Song.java)

public class Song { 

    private long id; 
    private String title; 
    private String artist; 

    public Song(long songID, String songTitle, String songArtist) { 
     this.id = songID; 
     this.title = songTitle; 
     this.artist = songArtist; 
    } 

    public long getID(){return id;} 
    public String getTitle(){return title;} 
    public String getArtist(){return artist;} 

} 

我只是想,如果有任何的方式来各自songart获取他们的歌。

与下面的代码试图让松艺:

ContentResolver musicResolver = getContentResolver(); 
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 
int albumIDColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); 
long thisAlbumID = musicCursor.getLong(albumIDColumn); 
Cursor cursor = musicResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
         new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, 
         MediaStore.Audio.Albums._ID + "=?", 
         new String[]{String.valueOf(thisAlbumID)}, 
         null);   
String imagePath = ""; 
if (cursor.moveToFirst()) { 
    imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); 
} 
+0

如果我还因为它存储的歌曲信息编辑宋级。 –

+0

是的,你需要改变你的bean类作为一个新的参数添加。 – Gaurav

+0

嘿对不起,但我是这个东西的初学者,你能否完全写出内容解析器和宋课的代码,就像我在我的问题中写的一样,如果你有时间的话。 –