




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录引 言- 1 -二编写目的- 1 -三实现功能- 2 -四功能需求(用例图分析)- 2 -4.1.1 播放器的基本控制需求。- 3 -4.1.2 播放清单列表管理需求- 4 -4.1.3 播放友好性需求- 4 -4.1.4 播放器扩展卡需求- 6 -4.1.5 功能需求(时序图)分析- 6 -五 系统结构图和流程图.- 7 -5.1.1系统功能表- 7 -5.1.2系统界面需求- 8 -5.1.3 运行环境需求- 9 -5.1.4 音乐播放器e-r图- 9 -六数据库连接- 10 -6.1.2 创建数据库- 11 -6.1.3操作数据库- 11 -6.1.4 数据显示- 12 -七播放器系统功能详细设计- 13 -7.1音乐播放器主界面功能实现- 13 -7.1.1 播放器主界面- 13 -7.1.2 播放界面音轨的实现- 14 -7.1.3 播放器播放、暂停、停止等功能- 17 -7.1.4 sqlitedatabase数据库- 18 -第八章 结 论- 34 -ii引 言 当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,windows mobile,symbian,以及谷歌的android操作系统,其中占有开放源代码优势的android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌android系统就能做到。本文的音乐播放器就是基于谷歌android手机平台的播放器。 android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于android平台的。 随着计算机的广泛运用,手机市场的迅速发展,各种音频视频资源也在网上广为流传,这些资源看似平常,但已经渐渐成为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费,比如cpu,内存等的占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,选择了开发多语种的音频视频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户(如听歌,看电影)的需求,除了能播放常见格式的语音视频文件,高级功能:还能播放rmvb格式的视频文件。此外,还能支持中文、英文等语言界面。 要研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各种播放器播放的特别格式文件,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。目前已经实现的功能有能播放常见音频文件的功能,如mp3,wav,等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如快进,快退,音量调节等。播放模式也比较完善,有单曲,顺序,循环,随机播放等模式。二编写目的 现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,并且带有音乐剪切功能,可以把自己喜欢的部分进行剪切用作彩铃。实现的主要功能是播放mp3,wav多种格式的音乐文件,并且能够控制播放,暂停,停止,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲信息的编辑操作等多种播放控制功能,界面简明,操作简单。 本项目是一款基于android手机平台的音乐播放器,使android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练android的技术和其它在市场上的特点三实现功能(1)可以读取sd卡中的歌曲 (2)点击进入播放列表(3)可进行下一首播放 (4)可进行上一首播放(5)可进行快进(6)可调节播放时间(7)可进行录音 (8)可以实现歌曲暂停功能(9)可进行音乐剪切(10)可将歌曲分配到联系人用做铃声(11)可现实进度卡四功能需求(用例图分析) 根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:4.1.1 播放器的基本控制需求图4.1 播放器基本控制图4.1.2 播放清单列表管理需求 当用户选中列表中某一项歌曲,就有的需求:图4.2 播放器清单4.1.3 播放友好性需求图4.3 播放器设定4.1.4 播放器扩展卡需求图4.4 文件浏览器4.1.5 功能需求(时序图)分析音乐播放器的时序图分析如(图)4.5 系统时序图分析五 系统结构图和流程图5.1.1系统功能表功能类别子功能子功能播放列表播放列表菜单退出播放从sd寻找歌曲歌曲菜单播放-进入播放界面删除-sd卡同步更新重命名-数据库同步更新进行音乐剪切播放界面播放播放歌曲-线程启动-时间更新暂停暂停歌曲-线程暂停-时间暂停停止停止歌曲-线程停止-时间停止上一首播放列表索引变化-寻找上一id歌曲下一首播放列表索引变化-寻找下一id歌曲播放界面菜单返回到播放列表返回到主菜单从扩展卡寻找歌曲退出播放器隐藏播放界面主菜单退出程序程序退出进入播放列表显示播放列表表2.1 功能表图2.5.2 系统功能结构图5.1.2系统界面需求 播放器界面要求布局合理,颜色舒适,控制按钮友好,为了减少开发工程量,图片素材多数为公司项目素材(图2.6)图2.6 播放器界面 说明:左下角为清单按钮 右下角为程序退出按钮 蓝色条为音轨 5.1.3 运行环境需求操作系统:android手机基于linux操作系统支持环境:android 1.5 - 2.0.1版本开发环境:eclipse 3.5 adt 0.95 5.1.4 音乐播放器e-r图音乐播放器 e-r(实体-联系:entity-relation图)图(图3.1.3)图3.1.3 e-r图六数据库连接6.1.1 这里将介绍如何进行android数据库连接,android中自带sqlite数据库,这是一个十分小型的数据库,这样正适合android这种移动平台使用。android数据库存储的位置在data/data/databases/目录下 android是利用contentprovider作为内容提供商,sqliteopenhelper数据库帮助类来进行对数据库的创建和操作。通过context.getcontentresolver()方法直接对数据库进行操作。程序中数据库类为dbhelper extends sqliteopenhelper(继承关系),内容提供类dbprovider extends contentprovider(继承关系)6.1.2 创建数据库 android 提供了标准的数据库创建方式。继承sqliteopenhelper ,实现oncreate 和 onupgrade 两个方法,有个好处就是便于数据库版本的升级,连接数据库的算法如下:public dbhelper(context context) / 创建数据库super(context, database_name,null, database_version);public void oncreate(sqlitedatabase db) / 创建时调用 db.execsql(database_create);public void onupgrade(sqlitedatabase db, int oldversion, int newversion) / 版本更新时调用db.execsql(drop table if exists file_table);oncreate(db); override / 在contextprovider运行时自动创建数据库 public boolean oncreate() dbopenhelper= new dbhelper(getcontext(); return true;数据库如果创建不成功则抛出filenotfoundexception异常6.1.3操作数据库 android对数据库的操作主要有插入、删除、更新、查询操作,在进行任何操作时都必须指定一个uri,才能对相应的表进行数据操作。/数据库删除操作overridepublic int delete(uri arg0, string arg1, string arg2) sqlitedatabase db = dbopenhelper.getwritabledatabase();try db.delete(filecolumn.table, arg1, arg2); catch (exception ex) ex.printstacktrace();return 1;override/数据库插入操作public uri insert(uri uri, contentvalues values) sqlitedatabase db = dbopenhelper.getwritabledatabase();long count = 0;try count = db.insert(filecolumn.table, null, values); catch (exception ex) ex.printstacktrace(); if (count 0) return uri;else return null;/ 数据库更新操作overridepublic int update(uri uri, contentvalues values, string selection,string selectionargs) sqlitedatabase db = dbopenhelper.getwritabledatabase();int i = 0;try i = db.update(filecolumn.table, values, selection, null);return i; catch (exception ex) return 0;6.1.4 数据显示程序是利用cursor游标类指向数据表中的某一项,然后进行查询数据,用log日志显示出来override/数据库查询操作public cursor query(uri uri, string projection, string selection,string selectionargs, string sortorder) sqlitedatabase db = dbopenhelper.getwritabledatabase();/ 依次参数为:表名,查询字段,where语句,替换,group by(分组),having(分组条件),order by(排序)cursor cur = db.query(filecolumn.table, projection, selection,selectionargs, null, null, sortorder);return cur;七播放器系统功能详细设计7.1音乐播放器主界面功能实现7.1.1 播放器主界面播放器主界面(图5.1)图 7.1android的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和炫丽的效果。播放器主界面是一个activity,android工程在每个activity启动的时候会首先执行oncreate()方法,如下代码:overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.play_rack);该方法主要执行界面的初始化操作,activity有个设置布局的方法:context.setcontentview(layoutresid),参数为资源id,该id在工程目录res/layout下,主界面布局文件名为play_rack。下面为play_rack.xml布局文件代码结构如下: 在绝对布局下嵌套两种线性布局和,第一个实现了标题和歌曲名的显示位置,通过布局设置绝对坐标来控制标题的位置。每个布局内可以放置多种widget(窗体部件)例如:等。每个widget内有多种属性,可以设置该widget的坐标,大小,背景和颜色等参数。在播放界面中,歌词显示为居中,实现方法代码如下:属性:orientation=horizontal:此线性布局的子部件为水平方式布局layout_width=fill_content :布局的宽度为填满父布局layout_height=wrap_content :布局的高度子由窗体的大小决定 窗体textview 文本 :textcolor=8deeee 设置文本显示的颜色rgb为 8deeeetextsize为默认大小7.1.2 播放界面音轨的实现播放器音轨seekbar(如下图)android系统自带seekbar(如下图)图 7.2 不管是从界面外观还是从功能上,系统自带的seekbar往往不能满足用户的需要。所以我在这里自定义了一个音轨seekbar,在play_rack.xml配置文件中,seekbar的代码如下: 上面代码中有参数android:thumb=drawable/thumb 为音轨游标的图片资源android:progressdrawable=drawable/seekbar_style为seekbar条的风格style。引用了drawable中的seekbay_style.xml文件,seekbay_style.xml是自定义的配置文件,算法如下: 配置文件中三个item项依次决定了seekbar的三层背景,从最下层的灰色到最上层的蓝色。通过各种属性设置了seekbar的倾斜度,两端圆半径,角度,中心位置,起始,中心和结束的颜色,游标的起始位置。通过这些属性设置,就自定义一个如上图一的seekbar音轨.播放器最重要的一部分就是音轨与歌曲进度同步的实现。音轨设置了两个textview用来显示当前歌曲播放的进度时间和歌曲的长度(图5.3) 图 7.3 音轨对象seekbar在歌曲刚开始播放的时候调用方法seekbar.setmax(),参数传入歌曲的长度。seekbar.setprogress(1)设置游标的起始进度为1。然后程序运行如下代码: private runnable thread_one = new runnable() / 线程public void run() int currently_progress = seekbar.getprogress() + 1000; seekbar.setprogress(currently_progress);currently_time.settext(getfiletime(mplayer.getcurrentposit ion();showlrctwo(lrc_time, lrc_word);handler.postdelayed(thread_one, 1000); android的线程的开始是通过handler类来进行的,handler类是线程与线程之间通信的桥梁,实现runnable接口会实现里面的run方法,当线程开始的时候,runnable中的run方法会向handler发一个message消息,这样,handler类就可以接收到run方法发送过来的不同的消息进行不同的代码处理。这样就达到了各线程之间的通信。要启动一个线程调用handler的方法postdelayed(runnable,1000)表示线程睡眠时间是1000ms 。以上代码意思是让播放歌曲的线程每隔1000ms,即每1秒对音轨的textview重新设置时间且让进度条前进1秒的进度。对音轨进行刷新。这样就实现了歌词同步功能seekbar有一个监听器,该监听器的作用是一直保持着对进度条的监听,当我们用鼠标向seekbar的各位置进行点击时,它会自动监听其位置,进行相应的位置显示。这也是进度条上的游标会不停的移动和歌词时间会不停的变动的原因。7.1.3 播放器播放、暂停、停止等功能图 7.4 如图5.4所示:各按钮水平放置,用的是布局中的线性布局linearlayout,用方法setorientation(horizontal);将其设置为水平。linearlayout中依次放置播放,暂停,停止,上、下一曲按钮属性。配置文件代码结构如下: android的媒体播放原理:android源程序已经为我们封装好了一个接口类,叫mediaplayer。该接口在执行行需要一个数据源,通过如下四个步骤:第一步:mediaplayer.reset();复位操作,为以后的媒体准备播放作准备。 第二步:传入歌曲数据源,这里也是一个数据流 mediaplayer.setdatasource(string path);参数需要传一个路径,该接口类在收到路径后将其转化为数据源。第三步:准备播放数据源,调用方法mediaplayer.prepare();第四步:mediaplayer.start();播放数据源,该数据源播放后,不再与程序 有关,需要用mediaplayer.stop()方法让其停止或mediaplayer.start();让其启动;歌曲数据源的获得:要获得数据源,需要我们提供给接口类一个歌曲存放路径,而这个路径已经被事先放到数据库里了,我们只需要进行数据库进行操作。将里面的路径取出。这里将调用playrackactivity的一个方法query();代码算法如下:public string query() contentresolver cr = getcontentresolver();uri uri = dbprovider.content_uri;string projection = path ;string selection = filename=?;string selectionargs = selectname ;cursor c=cr.query(uri,projection,selection, selectionargs, null);if (c.movetofirst() string path = c.getstring(0);return path;return null; 方法getcontentresolver是包android.content.contextwrapper里面的方法,它会自动的调用contentprovider中的关联数据库,我们需用这个方法就可以操作数据库。数据库操作需要一个uri 。uri类似一个网络连接的url。uri是数据库唯一的标识,不同的uri可以操作不同的数据库表。在查询数据库时需要传入一个当前播放的歌曲名字,通过歌曲名字来查询歌曲的路径。7.1.4 sqlitedatabase数据库sqlite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、pda、mp3)提供的一种高效的数据库引擎 sqlite数据库不像其它的数据库(如:oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的可以自由拷贝。基于其自身的先天优势,sqlite在嵌入式领域得到了广泛应用 sqlitedatabase类sqlitedatabase代表一个数据库对象,提供了操作数据库的一些方法 常用方法(图5.21)图 7.5sqliteopenhelper类 sqliteopenhelper是sqlitedatabase的一个帮助类,用来管理数据库的创建和版本更新。一般的用法是定义一个类继承之,并实现其两个抽象方法o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械设备维护手册编制分析报告
- 聚酯增粘装置操作工技术考核试卷及答案
- 纺织染色机操作工设备调试考核试卷及答案
- 织布上轴工工艺创新考核试卷及答案
- 施工人员技能提升策略分析报告
- 司泵工综合考核试卷及答案
- 数字出版内容策划效果评价分析报告
- 石材色彩温度感分析报告
- 第一节 机械能教学设计-2025-2026学年初中物理北师大版2024九年级全一册-北师大版2024
- 六年级道德与法治上册 第二单元 我们是公民 4 公民的基本权利和义务说课稿1 新人教版
- 严格人员进口管理制度
- 电梯成品保护方案(3篇)
- 科技研发公司保密管理制度
- 医院科教相关管理制度
- 2025年江苏省农业融资担保有限责任公司招聘笔试参考题库附带答案详解
- 无锡信捷校招笔试题目及答案
- 2024第41届全国中学生物理竞赛预赛试题(含答案)
- (新版)中国心理卫生协会心理咨询师考试复习题库(浓缩400题)
- 南昌大学 2018-2019学年第二学期期中考试大学英语试卷
- 2025-2030中国妇科中成药市场营销趋势及投融资发展状况研究报告
- 艾滋病防治知识宣传
评论
0/150
提交评论