Android读取Mp3音乐文件的方法
在做Mp3音乐播放器的时候,需要经常用到读取文件的操作,看过网上一些人写的读取方法,做个总结,部分代码有相似之处。
一、通过过滤器的方式过滤文件
public class MusicFilter implements FilenameFilter{public boolean accept(File dir , String name){return (name.endsWith(".mp3"));}
}
public void musicList(){mMusicList.clear();//先清除列表里之前的信息,mMusicList是自定义的listFile home=new File(MUSIC_PATH);if(home.listFiles(new MusicFilter()).length>0){for(File file :home.listFiles(new MusicFileter())){mMusicList.add(file.getName()); //把歌曲名字添加到mMusicList列表中}}
}
二、通过递归,判断文件后缀名的方法
public void Search(File file ,String[] ext){if(file!=null){if(file.isDirectory()){//如果是文件夹File[] listFile=file.listFiles();//列出所有的文件放在listFile这个File类型数组中if(listFile!=null){for(int i=0;i<listFile.length();i++){search(listFile[i], ext);//递归,直到把所有文件遍历完}}}else{//否则就是文件String fileName=file.getAbsolutePath();//返回抽象路径名的绝对路径名字符串String name=file.getName();//获得文件的名称for(int i=0;i<ext.length;i++){ if(fileName.endsWith(ext[i])){//判断文件后缀名是否包含我们定义的格式list.add(name);break;}}}}
}
调用的时候先声明file和String[] ext
private String[] ext={".mp3", ".awv"}//定义我们要查找的文件格式
File file=Environment.getExternalStorageDirectory();//获得SD卡的路径
search(file ,ext);
三、通过MediaStore的方式查询数据库得到歌曲信息
MediaStore这个类是Android系统提供的而一个多媒体数据库,android中多媒体信息都可以从这里提取,包括了多媒体数据库的所有信息,例如音频、视频和图像,android把所有的多媒体数据接口进行了封装,所有的数据库不用自己进行创建,直接调用ContentResolver去调用那些已经封装好的接口就可以进行数据库操作了,操作视频和图像的方法和操作音频类似,只需要将URL部分改动就可以了。
首先,要得到一个ContentResolver实例,利用Activity或者Service中的Context也可以
ContentResolvermResolver =Context.getContentReslover;
Cursor cursor =mResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URL,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
//介绍下query方法query(uri,prjs,selections,selectArgs,order);
Uri :这个Uri代表要查询单额数据库名称加上表的名称,一般直接从MediaStroe里获取的信息,例如我们要取得所有的歌曲信息,就必须利用MediaStore.Audio.Media.EXTERNAL_CONTENT_RUI这个Uri。专辑信息要利用MediaStore.Audio.Albums.EXTERNA_CONTENT_URI这个Uri来查询,其他的也类似。
Prjs:代表要从表中选择的列,用一个StringS数组来表示。
Selections:相当于SQL语句中的where子句,就是代表你的查询条件。
selectArgs:这个参数是说你的Selections里有?这个符号是,这里可以以实际值代替这个问号。如果Selections这个没有?的话,那么这个String数组可以为null。
Order:说明查询结果按什么来排序。
1、建立一个类,定义我们的文件信息
public class Mp3Info{private long id; // 歌曲ID 3private String title; // 歌曲名称 0private String album; // 专辑 7private long albumId;//专辑ID 6private String displayName; //显示名称 4private String artist; // 歌手名称 2private long duration; // 歌曲时长 1private long size; // 歌曲大小 8private String url; // 歌曲路径 5private String lrcTitle; // 歌词名称private String lrcSize; // 歌词大小public Mp3Info(){super();}public Mp3Info(long id, String title, String album, long albumId,String displayName, String artist, long duration, long size,String url, String lrcTitle, String lrcSize){super();this.id = id;this.title = title;this.album = album;this.albumId = albumId;this.displayName = displayName;this.artist = artist;this.duration = duration;this.size = size;this.url = url;this.lrcTitle = lrcTitle;this.lrcSize = lrcSize;}
}
public class MediaUtil{public static List<Mp3Info> getMp3Infos(Context context){Cursor cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);Lisr<Mp3Info> mp3Infos =new ArrayList<Mp3Infos>();for (int i=0;i<cursor.getCount();i++){cursor.moveToNext();long id=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); // 音乐idString title = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))); // 音乐标题String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 艺术家String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); // 专辑String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));long albumId = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 时长long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); // 文件大小String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); // 文件路径int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 是否为音乐if (isMusic != 0) { // 只把音乐添加到集合当中mp3Info.setId(id);mp3Info.setTitle(title);mp3Info.setArtist(artist);mp3Info.setAlbum(album);mp3Info.setDisplayName(displayName);mp3Info.setAlbumId(albumId);mp3Info.setDuration(duration);mp3Info.setSize(size);mp3Info.setUrl(url);mp3Infos.add(mp3Info);}}return mprInfos;
}
/*向List集合里添加Map对象,每个Map对象存放一首音乐的所有属性
*/
public static List<HashMap<String, String>> getMusicMaps(List<MapInfo> mp3Infos){List<HashMap<String, String>> mp3list = new ArrayList<HashMap<String, String>>();for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {Mp3Info mp3Info = (Mp3Info) iterator.next();HashMap<String, String> map = new HashMap<String, String>();map.put("title", mp3Info.getTitle());map.put("Artist", mp3Info.getArtist());map.put("album", mp3Info.getAlbum());map.put("displayName", mp3Info.getDisplayName());map.put("albumId", String.valueOf(mp3Info.getAlbumId()));map.put("duration", formatTime(mp3Info.getDuration()));map.put("size", String.valueOf(mp3Info.getSize()));map.put("url", mp3Info.getUrl());mp3list.add(map);}return mp3list;
}
/*格式化时间,把毫秒转换成分:秒格式
*/
public static String formaTime(long time){String min = time / (1000 * 60) + "";String sec = time % (1000 * 60) + "";if (min.length() < 2) {min = "0" + time / (1000 * 60) + "";} else {min = time / (1000 * 60) + "";}if (sec.length() == 4) {sec = "0" + (time % (1000 * 60)) + "";} else if (sec.length() == 3) {sec = "00" + (time % (1000 * 60)) + "";} else if (sec.length() == 2) {sec = "000" + (time % (1000 * 60)) + "";} else if (sec.length() == 1) {sec = "0000" + (time % (1000 * 60)) + "";}return min + ":" + sec.trim().substring(0, 2);}
}
在实际的开发中,调用以上各种方法的时候,请记得开辟新的线程,读取SD卡,查询数据库,网络下载等操作都是需要在新的线程中进行,然后使用Handler线程通讯,向主线程发送消息,通知更新。
Android读取Mp3音乐文件的方法相关推荐
- android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson ...
- MIDI应用: 播放midi音乐文件的方法 [Win32版本+ C语言版本]
播放midi音乐文件的方法 背景说明: 在游戏编程中,给程序增加音效几乎是必须的;在普通程序中增加音效也会给使用者带来更好的体验;而mid格式的音效文件体积最小(大约1k到数十k),效果却不亚于MP3 ...
- Android获取mp3音频文件播放总时长
Android获取mp3音频文件播放总时长 一般是需要文件的绝对路径,需要读取文件,转成媒体类解析,最好获取播放时长,然后关闭资源. /** * 获取音频文件的总时长大小 * * @param fil ...
- python xlrd读取excel-使用Python xlrd模块读取Excel格式文件的方法
这是一篇关于如何使用Python xlrd模块读取Excel格式文件的方法的文章,下面的python代码中使用 了xlrd模块的方法,这样就能够很方便的读取 excel 文件内容.同是这个xlrd模块 ...
- python读取数据库文件的扩展名_Python读取sqlite数据库文件的方法分析
本文实例讲述了Python读取sqlite数据库文件的方法.分享给大家供大家参考,具体如下: 这是Python内置的,不需要pip install 包 数据库里面有很多张表 要操作数据库首先要连接co ...
- 使用Python扩展库spleeter分离MP3音乐文件中的伴奏和人声
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年9月第10次印刷,山东省一流本 ...
- Android 读取本地txt文件中的内容
Android 读取本地txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputSt ...
- php生成vcf,php简单读取.vcf格式文件的方法示例
本文实例讲述了php简单读取.vcf格式文件的方法.分享给大家供大家参考,具体如下: /** * 读取.vcf格式文件 * @param $filename */ function readCvf($ ...
- php vcf,php读取 .vcf 格式文件的方法
这篇文章主要介绍了php读取.vcf格式文件的方法,结合具体实例形式分析了php自定义函数读取vcf格式文件的具体实现方法与相关注意事项,需要的朋友可以参考下 具体如下: /** * 读取.vcf格式 ...
最新文章
- linux 编译sqlitecpp,编译安装sqlite3数据库
- poj 1236 Network of Schools
- oracle expdp导出教程,Oracle Expdp Impdp 数据泵导入导出
- 写给准爸爸的专业指导
- CSMAR database query sample
- 【Windows 10 应用开发】使用快捷访问键
- github高级搜索技巧_【建议收藏】百度 quot;隐藏quot; 的高级搜索技巧
- 蛇形打印数组(某宝典公司面试手撕代码题)
- 什么是OLAP和OLTP
- Eigen入门之密集矩阵 5 - 再谈Matrix初始化
- centos vsftp mysql_CentOS6.4 实现基于mysql的vsftpd
- 使用git-bash向码云提交项目
- Maven 用Eclipse创建web项目后报错的解决方式
- python define function的顺序_Python 函数声明先后顺序的问题
- 【通信】基于matlab FDTD法研究移动通信终端电磁辐射对人体的影响【含Matlab源码 761期】
- 1 使用WPE工具分析游戏网络封包
- MSDN2008中文版下载地址
- 分享一下自己开发 kindle 电子书下载助手
- 连续分配存储管理方式
- 微信新版本文件乱保存自用解决方法