MediaStore部分属性解释

来源:互联网 发布:linux 系统备份与恢复 编辑:程序博客网 时间:2024/05/16 17:26

MediaStore部分属性解释


最近尝试开发一个Android的音乐播放器,其中用到了MediaStore获取系统内部的歌曲等信息,先将此总结一下。

歌曲信息

//获取歌曲在系统中的idMediaStore.Audio.Media._ID//获取歌曲的歌名MediaStore.Audio.Media.TITLE;//获取歌曲所在专辑的id MediaStore.Audio.Media.ALBUM_ID;//获取专辑的歌手名MediaStore.Audio.Media.ARTIST//获取歌曲的时长MediaStore.Audio.Media.DURATION//获取歌曲的大小MediaStore.Audio.Media.SIZE//获取专辑名MediaStore.Audio.Media.ALBUM//获取歌曲路径,如xx/xx/xx.mp3ediaStore.Audio.Media.DATA

专辑信息

//获取专辑idMediaStore.Audio.Albums._ID//获取专辑名MediaStore.Audio.Albums.ALBUM//获取专辑歌手MediaStore.Audio.Albums.ARTIST//获取专辑歌曲数MediaStore.Audio.Albums.NUMBER_OF_SONGS

歌手信息

//歌手idMediaStore.Audio.Artists._ID//歌手名MediaStore.Audio.Artists.ARTIST//歌手歌曲数MediaStore.Audio.Artists.NUMBER_OF_TRACKS

文件夹

利用ContentProvider查询的Uri如下:

//查询歌曲信息MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;//查询专辑信息MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;//查询歌手信息MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;//查询文件信息MediaStore.Files.getContentUri("external");

//具体查询方法,以查询手机中的歌曲为例。

private static final Uri QUERY_SONG_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;/** * 查询手机里歌曲信息的列 */private static final String[] SONG_PROJECTION = new String[]{        MediaStore.Audio.Media._ID,        MediaStore.Audio.Media.TITLE,        MediaStore.Audio.Media.DATA,        MediaStore.Audio.Media.ALBUM_ID,        MediaStore.Audio.Media.SIZE,        MediaStore.Audio.Media.ALBUM,        MediaStore.Audio.Media.ARTIST,        MediaStore.Audio.Media.ARTIST_ID,        MediaStore.Audio.Media.DURATION};public static List<SongInfo> querySongInfos(Context context) {    ContentResolver cr = context.getContentResolver();    Cursor cursor = cr.query(            QUERY_SONG_URI,            SONG_PROJECTION, null, null,            MediaStore.Audio.Media.DEFAULT_SORT_ORDER);    return parseSongCursor(cursor);}private static List<SongInfo> parseSongCursor(Cursor cursor) {    List<SongInfo> songInfos = new ArrayList<>();    while (cursor.moveToNext()) {        SongInfo songInfo = new SongInfo();        songInfo.setSongId(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID)));        songInfo.setSongName(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));        songInfo.setAlbumId(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)));        songInfo.setArtist(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)));        songInfo.setDuration(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)));        songInfo.setSize(cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)));        songInfo.setAlbum(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)));        //data就是路径,xx/xx/xx.mp3        String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));        songInfo.setData(filePath);        String folder = filePath.substring(0, filePath.lastIndexOf(File.separator));        songInfo.setFolder(folder);        songInfos.add(songInfo);    }    return songInfos;}

SongInfo类如下:

public class SongInfo{    /**     * 歌曲id     */    private int songId;    /**     * 专辑id     */    private int albumId;    /**     * 歌名     */    private String songName;    /**     * 歌手     */    private String artist;    /**     * 时长     */    private int duration;    /**     * 大小     */    private long size;    /**     * uri     */    private String data;    /**     * 专辑     */    private String album;    /**     * 文件夹路径     */    public String folder;    public SongInfo() {    }    public String getAlbum() {        return album;    }    public void setAlbum(String album) {        this.album = album;    }    public int getAlbumId() {        return albumId;    }    public void setAlbumId(int albumId) {        this.albumId = albumId;    }    public String getArtist() {        return artist;    }    public void setArtist(String artist) {        this.artist = artist;    }    public String getData() {        return data;    }    public void setData(String data) {        this.data = data;    }    public int getDuration() {        return duration;    }    public void setDuration(int duration) {        this.duration = duration;    }    public String getFolder() {        return folder;    }    public void setFolder(String folder) {        this.folder = folder;    }    public long getSize() {        return size;    }    public void setSize(long size) {        this.size = size;    }    public int getSongId() {        return songId;    }    public void setSongId(int songId) {        this.songId = songId;    }    public String getSongName() {        return songName;    }    public void setSongName(String songName) {        this.songName = songName;    }}

附加一个通过歌曲文件获得歌曲内部的专辑封面的方法。

/**    根据歌曲路径获得专辑封面     * @Description 获取专辑封面     * @param filePath 文件路径,like XXX/XXX/XX.mp3     * @return 专辑封面bitmap */public static Bitmap createAlbumArt(final String filePath) {    Bitmap bitmap = null;    //能够获取多媒体文件元数据的类    MediaMetadataRetriever retriever = new MediaMetadataRetriever();    try {        retriever.setDataSource(filePath); //设置数据源        byte[] embedPic = retriever.getEmbeddedPicture(); //得到字节型数据        //bitmap = BitmapFactory.decodeByteArray(embedPic, 0, embedPic.length); //转换为图片        //要优化后再加载        bitmap=BitmapUtil.decodeBitmapByByteArray(embedPic,80,80);    } catch (Exception e) {        e.printStackTrace();    } finally {        try {            retriever.release();        } catch (Exception e2) {            e2.printStackTrace();        }    }    return bitmap;}
1 0
原创粉丝点击