音乐播放器的实现-音乐文件的获取(1)
2019独角兽企业重金招聘Python工程师标准>>>
一。如何得到 Music列表
我们定义 Music类,并用set/get .如下
public class Music {private String title;private String album;private String singer ;private String url;private long size;private long time ;private String name ;
//setters and getters
再定义 MusicList 类,用于得到系统 中mp3音乐 的列表 。里面的方法
public static List<Music> getMusicData(Context context)
我们要用到 ContentResolver 。
ContentResolver resolver = context.getContentResolver();
在这里,我们要补充查询歌曲的方法:
Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中。在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。
MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。下面我们重点介绍查询SD卡上的音乐文件信息。
先来了解一下ContentResolver的查询接口:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。
Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。Null则返回所有信息。
selection: 指定查询条件
selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。
SortOrder:指定查询结果的排列顺序
下面的命令将返回所有在外部存储卡上的音乐文件的信息:
Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
得到cursor后,我们可以调用Cursor的相关方法具体的音乐信息:
歌曲ID:MediaStore.Audio.Media._ID
Int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
歌曲的名称 :MediaStore.Audio.Media.TITL
String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
歌曲的专辑名:MediaStore.Audio.Media.ALBUM
String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
歌曲的歌手名: MediaStore.Audio.Media.ARTIST
String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
歌曲文件的全路径 :MediaStore.Audio.Media.DATA
String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
歌曲文件的名称:MediaStroe.Audio.Media.DISPLAY_NAME
String display_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
歌曲文件的发行日期:MediaStore.Audio.Media.YEAR
String year = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.YEAR));
歌曲的总播放时长 :MediaStore.Audio.Media.DURATION
Int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
歌曲文件的大小 :MediaStore.Audio.Media.SIZE
Int size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
接下来,我们开始 查询
public class MusicList {public static List<Music> getMusicData(Context context){List <Music> musicList = new ArrayList<Music>();ContentResolver resolver = context.getContentResolver();if (resolver!=null){ //得到music 列表 Cursor c = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);if (c==null){return null;}c.moveToFirst();while(!c.isAfterLast()){Music music = new Music();String title = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE));String singer = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST));if (singer.equals("<unknown>")){singer = "未知艺术家";}long size = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.SIZE));String album = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM));long time = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.DURATION));String url = c.getString(c.getColumnIndex(MediaStore.Audio.Media.DATA));String name = c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));music.setAlbum(album);music.setName(name);music.setSinger(singer);music.setSize(size);music.setTime(time);music.setTitle(title);music.setUrl(url);musicList.add(music);c.moveToNext();}}return musicList;}
}
要注意的是,我们先只关注 MP3格式 的,所以差一个格式 选择的步骤 ,程序 改成
String substr = name.substring(name.length()-3, name.length());if (substr.equals(".mp3")){music.setAlbum(album);music.setName(name);music.setSinger(singer);music.setSize(size);music.setTime(time);music.setTitle(title);music.setUrl(url);musicList.add(music);}c.moveToNext();
转载于:https://my.oschina.net/chuiyuan/blog/268731
音乐播放器的实现-音乐文件的获取(1)相关推荐
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...
- android音乐播放器git,Android音乐播放器
Android音乐播放器 介绍 Android音乐播放器开发 进度 算是全部完成了,后续只会改进了. 如何使用 按这篇博客修改一下gradle相关文件,匹配自己的开发环境 日志 2020.12.15 ...
- Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...
- linux安装深度播放器,分享|Ubuntu 14.04 用户如何安装深度音乐播放器和百度音乐插件...
播放本地音乐或者收听国外的音乐电台,Ubuntu 14.04 自带的音乐播放器 Rhythmbox 完全能够满足,但是如果你想有像酷狗那样的国内播放器就需要折腾一下,还好有深度音乐播放器,这是一款完全 ...
- Android复习09【内容提供者、音乐播放器(附完整工程文件)】
2020-04-16[第9周---周四] 音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij 目 录 PersonCp PersonCp.java ...
- pyqt5+pygame实现音乐播放器,可以自动提取文件图片,最终版本
pyqt5+pyagme实现音乐播放器,运用了pyqt5的list,可以双击播放,会自动提取音频文件的图片 源码下载**:自己往下翻**!!!,(但如果你想用积分下载我也拦不了你) https://d ...
- android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...
Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...
- android 系统锁屏音乐播放器,Android实现音乐播放器锁屏页
本文实例为大家分享了Android音乐播放器锁屏页的具体代码,供大家参考,具体内容如下 首页我们先看一下效果图 下边来说一下实现逻辑,其主要思路就是新建一个activity使其覆盖在锁屏页上边. 一. ...
- java音乐播放器文库_android音乐播放器开发教程
关于音乐列表的读取,不同的音乐播放器都会有不同的方案,有的是有多重方案并用.例如说,全盘扫描音乐格式文件等. 首先我封装了一个Audio类来存储读取的音频信息: public class MediaU ...
- android音乐播放器sd,Android音乐播放器(2)从SD卡中读取音乐
首先提一下我的UI设计,对于主页面,用到了侧滑效果,这样在一个页面上可以有更多按钮而不显得拥挤,其实也就是我的另一篇博客中(http://blog.csdn.net/ye_yun_lin/articl ...
最新文章
- chromium浏览器_全新Edge浏览器上线,Chromium内核,可通过Windows Update更新
- GSS-API GSSAPI 介绍 通用的安全机制
- 如何编译Apache Hadoop2.2.0源代码
- linux怎么用jconsole_jconsole监控linux系统的jvm使用
- SAP 电商云 UI 如何知道当前的 breakpoint 是 xl - extremely large?
- python执行adb命令_Python实现对adb命令封装
- linux socket通信组件,Linux下socket简单通信
- js java传参乱码_【技术贴】解决前台js传参中文乱码
- 让 AI 训练 AI:揭秘阿里、浙大的 AI 训练师助手
- 如何选择漏电保护器规格型号_电涌保护器(SPD)选择有哪几个关键的参数?SPD如何使用和安装?...
- 百度指数邀请序列号_腾讯第8款社交AppHood 上线;抖音内测云游戏、直播回放等新功能;百度推出多人视频社交App一起吧| 产品挖掘机...
- 删除和修改nbsp;预留nbsp;:BAPI_RESERVATI…
- 软件工程(吕云翔第二版)部分简答题答案
- igs无法分配驱动器映射表_CAD图纸字体不全怎么办?只要修改字体映射表就可以轻松解决了...
- [已解决]ubuntu下谷歌浏览器无法上网
- 会议室预约小程序-会议室预约小程序
- 网络创业者莱恩-福克斯:最后一分钟的奇迹
- php购物车登录用cookie,php利用cookies实现购物车的方法_PHP
- C# WinForm应用程序的多语言环境支持
- 虚拟机内存不足的问题
热门文章
- flash写保护原理_一种基于flash写保护的防止flash被意外篡改的方法与流程
- 土地利用转移矩阵图怎么做_土地利用转移矩阵生成的几种方法
- iis7.5 php7.0,(原创)win7自带IIS7.5+php7.0.10安装教程(图)
- 国赛来咯,全国大学生智能汽车竞赛百度赛道正式开启
- 使用soundcard在Python中操作声卡
- 第十六届全国大学生智能车竞赛全国总决赛获奖排行榜
- 从150kHz 到 150MHz漫谈智能车竞赛中的无线导航技术
- 标杆课程采访补充问题
- docker ubuntu镜像_Docker 入门指南 | Linux 中国
- matlab 两列数据相乘,在EXCEL中,两列完全相同的数据,求和结果不一样??单元格两列相乘的公式...