`
wangxiaohigh
  • 浏览: 1426000 次
文章分类
社区版块
存档分类
最新评论

Android中音乐文件的信息详解【安卓源码解析二】

 
阅读更多
前段时间处理android音乐文件信息,上网查资料发现Android系统自己提供了MediaScanner,MediaProvider,MediaStore等接口并且提供了一套数据库表格,通过 Content Provider的方式把内容共享给用户。说明一下【Android数据是私有的】可以通过Content Provider的方式共享数据,前面我大致介绍了这个Content Provider,Android中ContentProvider简介【安卓进化二十七】。当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如 audio,video,图片等,将相应的信息放到定义好的数据库表格中。如果不插拔手机内存卡,如果把相应的音乐文件删除或移到别的文件夹中,系统就不会自动扫描手机内存卡,查询的Cursor对象存在,但是cursor.getCount()的值为0。在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。MediaStore中定义了一系列的数据表格,(这个数据表格是android系统自己建立的,我们不用关心如何建立,我们关心如何使用就可以了!)通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。

先来了解一下ContentResolver的查询接口,和sqlite数据库查询的方法是一样的

通过query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);得到一个Cursor对象,这个Cursor对象中有数据库字段对应相应的音乐的信息:

Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。
Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。Null则返回所有信息。
selection: 指定查询条件
selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。
SortOrder:指定查询结果的排列顺序

下面的命令将返回所有在外部存储卡上的音乐文件的信息:

先得到一个ContentResolver对象:ContentResolver cr = this.getContentResolver();

Cursor cursor = cr.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.TITLE
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 dataurl = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));

歌曲的总播放时长 :MediaStore.Audio.Media.DURATION
int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));

歌曲文件的大小 :MediaStore.Audio.Media.SIZE
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));



下面看我写的小程序的截图:

程序的开始界面: 点击button按钮后的界面:

点击选择曲目后的界面:点击情歌后的界面:

下面看代码:在NotificationActivity工程下面

在com.cn.daming包下的NotificationActivity.java的代码:

在layout包下的main.xml中的代码:

在res下的string.xml中的代码:





  


  
分享到:
评论

相关推荐

    Android系统定制之Android.mk和Android.bp语法详解(精通版).mp4

    3.Android.mk或Android.bp中引用Android的第三方(jar、aar、so)、Androidx的类库等的使用方法 4.Android.mk或Android.bp编译生成Apk、静态库、动态库、可执行文件等的使用方法 5.Android系统定制有源码App或无源码...

    android核心技术与实例详解 完整源码

    《android核心技术与实例详解》完整源码

    Android软件开发之EditText 详解源码

    雨松MOMO带你做软件 Android软件开发之EditText 详解源码 欢迎大家下载阅读。

    Android.bp文件说明.pdf

    Android新编译规则Android.bp文件语法规则详细介绍,条件编译的配置案例。 Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 ...

    Android 中MediaPlayer使用详解源码

    MediaPlayer类是Android开发中用于控制音频/视频文件和流的播放。

    android Launcher源码详解

    android源码的Launcher详细解析,分析Launcher的运行机制

    Android代码-AndroidNote Android笔记

    源码解析 自定义View详解 Activity界面绘制过程详解 Activity启动过程 Android Touch事件分发详解 AsyncTask详解 butterknife源码详解 InstantRun详解 ListView源码分析 VideoView源码分析 View绘制过程详解 网络...

    android 贪吃蛇 源码分析

    刚开始学细android开发,对于SDK Samples中的贪吃蛇开源代码进行了分析和注释。发上来大家共享~

    Android底层开发技术实战详解-内核、移植和驱动(第2版,Kindle电子书)

    本书从底层原理开始讲起,结合真实的案例向读者详细介绍了android内核、移植和驱动开发的整个流程。全书分为19章,依次讲解...在每一章中,重点介绍了与android驱动开发相关的底层知识,并对android源码进行了剖析。

    TabHost详解 博文对应源码(二)

    《TabHost详解》对应源码之二,博客地址:http://blog.csdn.net/harvic880925/article/details/17120325

    android编程之XML文件解析方法详解(附源码)

    在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次...

    音乐播放器LitePlayer 源码实例下载(博文详解)

    涉及的技术有: 1、jsoup解析网络网页,从而获取需要的数据 2、android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现断点下载 3、线程池 4、图片缓存 5、service一直在后台运行 6、手机硬件...

    Android底层开发技术实战详解(第2共2部分)

    本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核、移植和驱动开发的整个流程。全书分为21章,依次讲解...在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。

    Android底层开发技术实战详解 第1共2部分

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。">本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核、移植和驱动开发的整个流程。全书分为21章,依次讲解...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...

    安卓Android开发电子书大全 2018 (1/4)

    5 Android源码.rar android 2高级编程(第2版).zip Android_控件.doc android中文教程.rar Android基础教程.rar android学习进阶路.doc android平台初级错误整理.doc Android应用开发揭秘源码.zip Android...

    Android 4.0网络编程详解(书籍的第一章至第二章的源码)

    《Android 4.0网络编程详解》专注于移动互联网智能终端操作系统和应用软件的开发,内容涉及iOS、Android和Windows Phone等系统的详细解析。应用软件、游戏的开发以及UI设计等。◆本丛书的作者均具有多年的开发经验,...

    Android底层开发技术实战详解

    《Android底层开发技术实战详解:内核、移植和驱动(第2版)》从底层原理开始讲起,结合真实的案例向读者详细介绍了Android...在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。

    详解安卓系统中的Android.mk文件

    由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析。这个文件的语法允许把源代码组织成模块,每个模块属于下列类型之一:  APK程序:一般...

    android手势识别讲解源码

    本源码是为本博客文章:ANDROID手势识别详解的代码参考,只是当你对读文章是看代码不怎么好看或者想对比运行效果的话,就下载去自己再慢慢研究吧....有问题请留言

Global site tag (gtag.js) - Google Analytics