欢迎使用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; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories