OPhone程序开发入门之音乐播放器Word文件下载.docx

上传人:b****3 文档编号:17843040 上传时间:2022-12-11 格式:DOCX 页数:24 大小:261.91KB
下载 相关 举报
OPhone程序开发入门之音乐播放器Word文件下载.docx_第1页
第1页 / 共24页
OPhone程序开发入门之音乐播放器Word文件下载.docx_第2页
第2页 / 共24页
OPhone程序开发入门之音乐播放器Word文件下载.docx_第3页
第3页 / 共24页
OPhone程序开发入门之音乐播放器Word文件下载.docx_第4页
第4页 / 共24页
OPhone程序开发入门之音乐播放器Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

OPhone程序开发入门之音乐播放器Word文件下载.docx

《OPhone程序开发入门之音乐播放器Word文件下载.docx》由会员分享,可在线阅读,更多相关《OPhone程序开发入门之音乐播放器Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

OPhone程序开发入门之音乐播放器Word文件下载.docx

同时MediaProvider,MediaScanner等系统服务也对媒体文件的管理提供了支持。

本文将重点介绍它们的使用。

3.第三层是Library层,它由一系列的c/c++库组成,这些库的能力通过JNI封装成java接口,由ApplicationFramework层提供给开发者。

多媒体系统库OpenCore,它是OPhone多媒体的核心,来源于PacketVideo。

它非常复杂,提供了完整的多媒体解决方案。

4.最底层为LinuxKernel和驱动,负责与硬件的数据交互等。

  图二说明了在OPhone平台中播放音乐文件时的调用关系。

  对于应用程序开发者来说,需要重点学习和关注的是如何使用AppliationFramework层提供给开发者的接口。

音乐媒体信息的管理

  在开始构架程序之前,我们需要准备一下必须的基本知识。

首先来了解一下在OPhone平台中应该如何获取音乐文件的信息以及如何管理这些信息。

  OPhone系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过ContentProvider的方式提供给用户。

当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中。

在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。

  MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。

下面我们重点介绍如何管理SD卡上的音乐文件信息。

  先来了解一下ContentResolver的查询接口:

viewplaincopytoclipboardprint?

1.Cursor 

query(Uri 

uri, 

String[] 

projection, 

String 

selection, 

selectionArgs, 

sortOrder);

Cursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder);

Uri:

指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。

Projection:

指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。

Null则返回所有信息。

selection:

指定查询条件

selectionArgs:

参数selection里有?

这个符号是,这里可以以实际值代替这个问号。

如果selection这个没有?

的话,那么这个String数组可以为null。

SortOrder:

指定查询结果的排列顺序

  查询所有歌曲:

cursor 

query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 

null, 

MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

Cursorcursor=query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

  该命令将返回所有在外部存储卡上的音乐文件的信息,其中常用的信息如下:

1.MediaStore.Audio.Media._ID:

歌曲ID 

Int 

id 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));

MediaStore.Audio.Media.TITLE:

歌曲的名称 

tilte 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));

MediaStore.Audio.Media.ALBUM 

歌曲的专辑名 

album 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));

MediaStore.Audio.Media.ARTIST:

歌曲的歌手名 

artist 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));

MediaStore.Audio.Media.DATA:

歌曲文件的路径 

url 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));

MediaStore.Audio.Media.DURATION:

歌曲的总播放时长 

duration 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));

MediaStore.Audio.Media.SIZE:

歌曲文件的大小 

size 

cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));

MediaStore.Audio.Media._ID:

歌曲IDIntid=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));

MediaStore.Audio.Media.TITLE:

歌曲的名称Stringtilte=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));

MediaStore.Audio.Media.ALBUM:

歌曲的专辑名Stringalbum=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));

MediaStore.Audio.Media.ARTIST:

歌曲的歌手名Stringartist=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));

MediaStore.Audio.Media.DATA:

歌曲文件的路径Stringurl=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));

MediaStore.Audio.Media.DURATION:

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

MediaStore.Audio.Media.SIZE:

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

查询歌手信息:

query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, 

MediaStore.Audio.Artists.DEFAULT_SORT_ORDER);

Cursorcursor=query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Artists.DEFAULT_SORT_ORDER);

  该命令将返回所有在外部存储卡上的歌手信息,其中常用的信息如下:

1.MediaStore.Audio.Artists._ID:

歌手id 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID));

MediaStore.Audio.Artists.ARTIST 

歌手姓名 

name 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST));

MediaStore.Audio.Artists.NUMBER_OF_ALBUMS:

共有多少该歌手的专辑 

numOfAlbum 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS));

MediaStore.Audio.Artists.NUMBER_OF_TRACKS:

共有多少该歌手的歌曲 

numOfSong 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_TRACKS));

MediaStore.Audio.Artists._ID:

歌手idIntid=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID));

MediaStore.Audio.Artists.ARTIST:

歌手姓名Stringname=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST));

MediaStore.Audio.Artists.NUMBER_OF_ALBUMS:

共有多少该歌手的专辑IntnumOfAlbum=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS));

MediaStore.Audio.Artists.NUMBER_OF_TRACKS:

共有多少该歌手的歌曲IntnumOfSong=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_TRACKS));

 查询专辑信息:

query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 

null,null, 

MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);

Cursorcursor=query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);

  

该命令将返回所有在外部存储卡上的专辑信息,其中常用的信息如下:

1.MediaStore.Audio.Albums._ID 

专辑id 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID));

MediaStore.Audio.Albums.ALBUM:

专辑名称 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));

MediaStore.Audio.Albums.NUMBER_OF_SONGS:

共用多少歌曲属于该专辑 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS));

MediaStore.Audio.Albums._ID:

专辑idIntid=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID));

MediaStore.Audio.Albums.ALBUM:

专辑名称Stringname=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));

MediaStore.Audio.Albums.NUMBER_OF_SONGS:

共用多少歌曲属于该专辑IntnumOfSong=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS));

 查询播放列表

query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 

MediaStore.Audio.Playlists.DATE_ADDED 

"

asc"

);

Cursorcursor=query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Playlists.DATE_ADDED+"

asc"

该命令将返回所有在外部存储卡上的专辑信息,其中常用的信息如下:

1.MediaStore.Audio.Playlists._ID 

播放列表id 

cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists._ID));

MediaStore.Audio.Playlists.NAME:

播放列表名称 

cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.NAME));

添加时间 

long 

dateAdded 

cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.DATE_ADDED));

MediaStore.Audio.Playlists.DATE_MODIFIED 

修改时间 

dateModified 

cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.DATE_MODIFIED));

MediaStore.Audio.Playlists._ID:

播放列表idIntid=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists._ID));

MediaStore.Audio.Playlists.NAME:

播放列表名称Stringname=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.NAME));

MediaStore.Audio.Playlists.DATE_ADDED:

添加时间longdateAdded=cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.DATE_ADDED));

MediaStore.Audio.Playlists.DATE_MODIFIED:

修改时间longdateModified=cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.DATE_MODIFIED));

 通过组合这些查询结果,指定查询条件,用户可以很方便的查询指定的媒体信息,比如:

查询属于指定歌手(歌手id为aid)的歌曲:

1.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 

MediaStore.Audio.Media.ARTIST_ID 

="

aid, 

MediaStore.Audio.Media.TITLE);

query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,MediaStore.Audio.Media.ARTIST_ID+"

+aid,null,MediaStore.Audio.Media.TITLE);

查询属于指定专辑(专辑id为aid)的歌曲:

1.return 

MediaStore.Audio.Media.ALBUM_ID 

returnquery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,MediaStore.Audio.Media.ALBUM_ID+"

以上我们重点介绍了音乐媒体信息的查询方法,对于媒体信息的增删改等操作主要集中在对播放列表的管理上,也是通过ContentResolver的insert,update,delete等接口来实现的。

只要搞清楚了各个参数的含义,相应URI以及各个字段的义,很容易实现。

由于篇幅原因,我们不再详细介绍,有兴趣的朋友可以查看OPhone开发文档。

音乐播放

  音乐文件的播放功能是由MediaPlayer类实现的,MediaPlayer提供了常用的接口,比如播放,暂停,停止,快速定位等。

播放音乐文件的基本调用流程:

1.生成MediaPlayer实例。

2.设置播放源(文件)

3.准备播放

4.开始播放

1.MediaPlayer 

mp 

new 

MediaPlayer();

mp.setDataSource(file_to_play);

mp.prepare();

mp.start();

MediaPlayermp=newMediaPlayer();

mp.setDataSource(file_to_play);

mp.prepare();

mp.start();

以上代码即可以完成最简单的音乐播放功能。

除了MediaPlayer类,我们还需要注意几个播放器件Listener的使用,它们提供了播放器的更多的状态信息。

1.MediaPlayer.OnBufferingUpdateListener

当播放网络上的媒体文件或者流媒体时 

MediaPlayer.OnBufferingUpdateListener的onBufferingUpdate(MediaPlayermp,intpercent)接口函数会被回调,通知当前的缓冲进度

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1