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)相关推荐

  1. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  2. android音乐播放器git,Android音乐播放器

    Android音乐播放器 介绍 Android音乐播放器开发 进度 算是全部完成了,后续只会改进了. 如何使用 按这篇博客修改一下gradle相关文件,匹配自己的开发环境 日志 2020.12.15 ...

  3. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  4. linux安装深度播放器,分享|Ubuntu 14.04 用户如何安装深度音乐播放器和百度音乐插件...

    播放本地音乐或者收听国外的音乐电台,Ubuntu 14.04 自带的音乐播放器 Rhythmbox 完全能够满足,但是如果你想有像酷狗那样的国内播放器就需要折腾一下,还好有深度音乐播放器,这是一款完全 ...

  5. Android复习09【内容提供者、音乐播放器(附完整工程文件)】

    2020-04-16[第9周---周四] 音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij 目 录 PersonCp PersonCp.java ...

  6. pyqt5+pygame实现音乐播放器,可以自动提取文件图片,最终版本

    pyqt5+pyagme实现音乐播放器,运用了pyqt5的list,可以双击播放,会自动提取音频文件的图片 源码下载**:自己往下翻**!!!,(但如果你想用积分下载我也拦不了你) https://d ...

  7. android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...

    Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...

  8. android 系统锁屏音乐播放器,Android实现音乐播放器锁屏页

    本文实例为大家分享了Android音乐播放器锁屏页的具体代码,供大家参考,具体内容如下 首页我们先看一下效果图 下边来说一下实现逻辑,其主要思路就是新建一个activity使其覆盖在锁屏页上边. 一. ...

  9. java音乐播放器文库_android音乐播放器开发教程

    关于音乐列表的读取,不同的音乐播放器都会有不同的方案,有的是有多重方案并用.例如说,全盘扫描音乐格式文件等. 首先我封装了一个Audio类来存储读取的音频信息: public class MediaU ...

  10. android音乐播放器sd,Android音乐播放器(2)从SD卡中读取音乐

    首先提一下我的UI设计,对于主页面,用到了侧滑效果,这样在一个页面上可以有更多按钮而不显得拥挤,其实也就是我的另一篇博客中(http://blog.csdn.net/ye_yun_lin/articl ...

最新文章

  1. chromium浏览器_全新Edge浏览器上线,Chromium内核,可通过Windows Update更新
  2. GSS-API GSSAPI 介绍 通用的安全机制
  3. 如何编译Apache Hadoop2.2.0源代码
  4. linux怎么用jconsole_jconsole监控linux系统的jvm使用
  5. SAP 电商云 UI 如何知道当前的 breakpoint 是 xl - extremely large?
  6. python执行adb命令_Python实现对adb命令封装
  7. linux socket通信组件,Linux下socket简单通信
  8. js java传参乱码_【技术贴】解决前台js传参中文乱码
  9. 让 AI 训练 AI:揭秘阿里、浙大的 AI 训练师助手
  10. 如何选择漏电保护器规格型号_电涌保护器(SPD)选择有哪几个关键的参数?SPD如何使用和安装?...
  11. 百度指数邀请序列号_腾讯第8款社交AppHood 上线;抖音内测云游戏、直播回放等新功能;百度推出多人视频社交App一起吧| 产品挖掘机...
  12. 删除和修改nbsp;预留nbsp;:BAPI_RESERVATI…
  13. 软件工程(吕云翔第二版)部分简答题答案
  14. igs无法分配驱动器映射表_CAD图纸字体不全怎么办?只要修改字体映射表就可以轻松解决了...
  15. [已解决]ubuntu下谷歌浏览器无法上网
  16. 会议室预约小程序-会议室预约小程序
  17. 网络创业者莱恩-福克斯:最后一分钟的奇迹
  18. php购物车登录用cookie,php利用cookies实现购物车的方法_PHP
  19. C# WinForm应用程序的多语言环境支持
  20. 虚拟机内存不足的问题

热门文章

  1. flash写保护原理_一种基于flash写保护的防止flash被意外篡改的方法与流程
  2. 土地利用转移矩阵图怎么做_土地利用转移矩阵生成的几种方法
  3. iis7.5 php7.0,(原创)win7自带IIS7.5+php7.0.10安装教程(图)
  4. 国赛来咯,全国大学生智能汽车竞赛百度赛道正式开启
  5. 使用soundcard在Python中操作声卡
  6. 第十六届全国大学生智能车竞赛全国总决赛获奖排行榜
  7. 从150kHz 到 150MHz漫谈智能车竞赛中的无线导航技术
  8. 标杆课程采访补充问题
  9. docker ubuntu镜像_Docker 入门指南 | Linux 中国
  10. matlab 两列数据相乘,在EXCEL中,两列完全相同的数据,求和结果不一样??单元格两列相乘的公式...