您的位置:首页 > 移动开发 > Android开发

欢迎使用CSDN-markdown编辑器

2016-02-15 12:54 459 查看

MediaStore部分属性解释

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

歌曲信息

//获取歌曲在系统中的id
MediaStore.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.mp3
ediaStore.Audio.Media.DATA


专辑信息

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


歌手信息

//歌手id
MediaStore.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;
}
}


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

/**
根据歌曲路径获得专辑封面
* @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[] arr = retriever.getEmbeddedPicture(); //得到字节型数据
//要优化后再加载
bitmap=BitmapUtil.decodeBitmapByByteArray(arr ,80,80);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
retriever.release();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bitmap;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  音乐 android