前段时间处理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中的代码:


 


更多相关文章

  1. android的PreferenceActivity
  2. android文件系统挂载分析(1)---正常开机挂载,分区信息解读
  3. Android编译时报错:Could not find bundletool.jar (com.android.
  4. Android(安卓)- 信息列表页面【仿】淘宝App
  5. 获取android手机基本信息
  6. Android中Log机制详解
  7. 国内一些优秀Android(安卓)开发者信息
  8. 文件浏览器
  9. android本地音乐播放(二)

随机推荐

  1. Android 如何让EditText不自动获取焦点
  2. Android SDK ADT下载地址
  3. StudyJams第一课的学习
  4. Android添加一个系统service
  5. Android 远程视频监控程序源码
  6. Android Notebook
  7. Android学习札记12:对Parcelable中describ
  8. Android GPS 开发
  9. android防止EditText自动弹出软键盘
  10. android EditView不换行的原因