【问题标题】:How to fetch songart (AlbumArt) from the internal and external storage of device?如何从设备的内部和外部存储中获取歌曲艺术(专辑艺术)?
【发布时间】:2017-10-18 19:20:50
【问题描述】:

我正在尝试制作一个音乐播放器应用程序。

我想要一个包含歌曲图片、歌曲标题和艺术家姓名的列表视图。

类似的东西。

我已经使用 Content Resolver 找到了 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;}

}

我只是想知道是否有任何方法可以为他们的歌曲获取相应的歌曲。

【问题讨论】:

    标签: android listview android-arrayadapter android-contentresolver


    【解决方案1】:

    尝试使用以下代码获取 Song Art:

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

    【讨论】:

    • 我是否也应该编辑歌曲类,因为它正在存储歌曲信息。
    • 是的,您需要将 bean 类更改为添加的一个新参数。
    • 嘿抱歉打扰,但我是这方面的初学者,如果你有时间,你能不能像我在我的问题中写的那样完整地编写 Content Resolver 和 Song 类的代码。
    • @Aditya Verma 如果您卡在某个地方,您应该自己尝试一下并在此处发布。这就是这个社区的意义......
    • 在实现您对我的代码的回答之后。它似乎不起作用。该应用程序不断崩溃。你能看看吗? stackoverflow.com/questions/46811103/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多