嵌入式基于Android的音乐播放器设计与实现_第1页
嵌入式基于Android的音乐播放器设计与实现_第2页
嵌入式基于Android的音乐播放器设计与实现_第3页
嵌入式基于Android的音乐播放器设计与实现_第4页
嵌入式基于Android的音乐播放器设计与实现_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学校代码: 10128学 号: 200920201039嵌入式系统综合设计说明书题 目: 基于android的音乐播放器设计与实现姓 名: 王若禹学 院: 信息工程学院班 级: 计算机09-2指导教师: 刘志强 庄旭飞 王晓强 杜秋阳2012 年 9 月 25 日摘 要 当今社会的生活节奏越来越快,随着硬件移动设备的越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉效果及用户体验,因此,也逐步的提高了对系统的要求。本文主要是在android系统上对音乐播放器应用程序的设计与实现进行讨论,通过这一过程来进一步学习与应用android平台,这样对个人的未来发展也很有意义。

2、 本论文的音乐播放器采用了android开源系统技术,利用java语言和eclipse开发工具对播放器代码进行编写。同时给出了详细的系统设计过程、部分界面截图及主要的功能流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集下载、播放、暂停、停止等功能于一体,性能良好,在android系统中能独立运行。mp3是一种声音文件的压缩格式,由于本播放器只限于应用层程序的探讨,所以对具体的压缩算法不做深究。 实验证明,基于android平台的软件开发简单,使用方便简洁,必将成为未来几年的发展方向,具有普遍意义。 关键词:android;音乐播放器;mp3;java目 录第一章引

3、言11.1项目背景11.2 编写目的1第二章android应用软件开发基础22.1 android的基本介绍22.2 android应用开发语言22.3 android应用程序组件22.4 androidmanifest.xml文件4第三章搭建android开发环境53.1 安装jdk53.2 安装eclipse53.3安装sdk53.4安装adt53.5 创建avd6第四章系统的总体设计74.1 设计思想74.2 系统功能结构图7第五章音乐播放器的详细设计115.1项目ui篇115.2开机动画页面的设计115.2.1 设计步骤115.2.2效果图125.3基本代码的编写125.3.1在ser

4、vice 里定义一系列关于播放状态的常量125.3.2注册广播接收 以及定义广播的action135.3.3写发送广播(前歌曲的信息及状态)的一些方法135.3.4播放控制代码的编写135.4主页面的代码实现145.4.1 初始化页面的一些基本控件145.4.2 seekbar的更新与监听145.5播放列表页面的实现155.5.1适配器的创建155.5.2 musiclist 中getmultidata( )方法的创建155.5.3 点击列表中的一项 跳转到播放列表 并播放当前歌曲155.6 notification功能的实现165.6.1 创建mynotification 这个类165.6.

5、2在activity中调用notifation这个类165.7菜单功能的实现165.8 appwidget的实现175.8.1 appwidget布局页面175.8.2 appwidget类的创建18第六章总结19参考文献20第一章 引言1.1项目背景android是谷歌于2007年公布的开放式源代码手机系统,一直受到人们的热捧。android是基于linux内核的软件平台和操作系统,它开放性就优于其他封闭式的手机系统。因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于android平台的。 随着计算机的广泛运用,手机

6、市场的迅速发展,各种音频资源也在网上广为流传。这些资源卡是平常,但已经渐渐成为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味最求外观花俏,功能庞大,对用户的手机造成很多资源浪费。比如cpu、内存等的占用率过高、在用户需要多任务操作时,受到不小的影响,带来了许多不便。而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,选择了开发多语种的音频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户听歌的需求。现今社会生活紧张,而欣赏音乐史其中最好的舒缓压力的方式之一。本项目的目的是开发一个可以播放主流音乐文件格式的播放器。本设计的实现的这主要功

7、能是播放mp3等音乐文件,并且能够控制播放器播放、暂停、停止、上一曲、下一曲。界面简单,操作简单。本项目是一款基于android手机,平台的音乐播放器,使android手机拥有个性的播放器,让手机主人随时随地处于音乐的旋律中。使人们的生活更加多样化。也使设计者更加熟练android的技术和其它在市场上的特点。1.2 编写目的现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放mp3文件格式的播放器,并且可以从服务器下载歌曲,控制播放,暂停,停止,音量调节,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。本项目是一款基于android手机

8、平台的音乐播放器,使android手机拥有个性的多媒体播放器,使手机显得更加生动灵活化,与人们更为接近,让手机主人随时随地处于音乐旋律之中。使人们的生活更加多样化,也使设计者更加熟悉基于android平台的应用布局及开发模式的特点,为以后实现更复杂的应用打好基础。第二章 android应用软件开发基础2.1 android的基本介绍android一词的本义指“机器人”同时也是google于2007年11月5日宣布的基于linux平台的开源手机操作系统的名称。该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。android是基于linux内核的

9、软件平台和操作系统。早期由google开发,在华注册商标名为“安致”,后由开放手机联盟(open handset alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构。主要分为三部分。低层以linux内核工作为基础,只提供基本功能,其他的应用软件则由各公司自行开发,以java作为编写程序的一部分。另外,为了推广此技术,google和其他几十个手机公司建立开发手机联盟。android在未公开之前常被传闻为google电话或gphone。大多传闻认为google开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,google开始发表自家品牌

10、手机电话的nexus one。2.2 android应用开发语言java是android上的主流开发语言,各种支持也最完善。android发布的api和sdk也都主要是面向java开发人员的。我们的播放器实例也是用java开发的。2.3 android应用程序组件 android应用程序最大的一个特点就是每个应用都由若干组件构成。而且各个应用程序的组件还可以相互调用(需要在代码中设置相应权限)。例如假设我们需要编写一个内嵌有网页的程序,那么我们无需亲自编写浏览器,而是可以直接调用系统自带的chrome lite浏览器组件。又如假设我们编写了两个应用程序,其中一个程序中有列表显示图片的组件,那么

11、我们在另外一个应用程序中就可以使用该组件,而不需要再编写该功能。也就是说,不同于我们平常编写的程序,android的应用程序不是单一入口,而是可以从代码的不同位置启动。这就要依靠组件来实现。 android应用程序的组件有以下四种: 1. activity 一个activity实际上表现出来的就是一个程序的界面。这个界面可能有许多种不同的形式,比如有列表形式,有文字形式,有图像格子等形式。一个应用程序也可能有不止一个activity。比如一个短消息的程序,需要有列表显示所有消息的activity,还至少需要一个编辑短消息的activity(界面),还可能需要设置、菜单等界面。每个activit

12、y都有一个默认的窗口用于绘制界面,一般情况下,它是充满全屏的,但是我们可以通过程序控制它,使其小于屏幕大小,也可以控制其浮动于其它窗口之上(如android中的toast信息)。 activity中显示出来的内容其实是由view堆叠形成的,view是由view基类派生出来的各种形式的界面元素,如listview,gridview等等,通过组合这些view,就形成了一个可见的activity。我们可以用activity.setcontentview()方法来设置一个activity中所要显示的view。2. service service是一种没有界面的组件,同我们平常在windows或linu

13、x系统中所理解的“服务”一样,android上的service也是运行在后台的,运行时间可以从系统启动到系统关闭为止。对于许多应用程序来说,service组件是至关重要的。以下载管理器为例,用户肯定希望能够在切换到其它程序时仍然在后台进行下载,这就需要用到service完成下载工作。而显示下载进度、已下载文件等信息则由activity完成,同时我们还希望能控制下载过程,如停止、继续等,这就需要activity与service之间进行通信。 android允许activity连接到或者绑定到service上,这样就可以让用户在界面上控制后台service的行为。 3.broadcast rece

14、iver broadcast意为广播消息,android系统自身会发出许多广播消息,如电量不足,用户修改了全局设置等,各个应用程序也以向整个系统广播消息,如文件下载完毕等。 broadcast receiver则是程序中专门用来接收广播消息的组件,它没有界面显示,只负责监听、接收广播消息,然后根据程序逻辑,启动其它组件去处理广播消息。它可以启动一个activity来同用户交互,也可以使用notificationmanager向用户发出通知。nitificationmanager的通知形式有许多种,比如说振动、响铃、闪led灯,还可以在android界面的消息栏处显示信息。 4.content

15、provider content provider是一种为其它应用程序提供数据的组件。这些数据可以保存在文件中,也可以保存在sqlite数据库中,还可以以其它任何有效的方式保存。contentprovider类为我们提供了一系列保存数据的方法供我们调用,可以很方便地存储数据。其它应用程序在需要使用这些数据时,可以用contentresolver对象,使用其中的方法。contentresolver可以与任何content provider交互,获取其中的数据。 只要需要某个组件,android就会尽力保证它的可用:如果该组件还没启动,就启动它,如果该组件所属的应用程序还没拥有一个进程,则为它启动

16、一个进程,如果系统资源不足以容纳一个新的进程,则将后台的某个进程杀死为新进程腾出资源。2.4 androidmanifest.xml文件androidmanifest.xml是每一个应用都需要的文件, 位于应用根目录下,它 描述了程序包的全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类, 什么样的数据可以操作,以及在什么地方运行。 androidmanifest.xml文件是一个结构化的xml文件,它除了包含有各个组件的信息,还包括许多其它的信息,它的基本样式如下所示: . . . 不难看出,name,icon,lable这些属性就分别指act

17、ivity的名称、图标、标识。我们通过manifest描述程序的信息,android系统就能读取出来并产生相应的行为。第三章 搭建android开发环境3.1 安装jdk由于android开发是基于java的基础上的,所以我们必须得安装jdk(jdk下载地址: 1.右击计算机-属性-高级系统设置-高级-环境变量,新建“系统变量”,设置变量名:“java_home”。变量值:“c:program filesjavajdk1.7.0_02”(视个人安装路径而定)。 2.找到变量名为path的项,双击,在变量值后面添加:“;%java_home%bin;”, 3.新建“系统变量”变量名:“class

18、path”,变量值:“.;%java_home%libdt.jar;%java_home%libtools.jar;” 配置完成后,重启可以在cmd下输入java或者javac测试。3.2 安装eclipseeclipse是我们以后在android开发时使用的开发平台,它集成了很多功能以及插件,在开发的过程中便于我们使用,在官网(/downloads/)可以下载到对应系统以及功能的安装包,在安装提示安装完成后并且完成了jdk的安装后即可正常使用。 3.3安装sdksdk(software development kit)初始包中有开发android程序

19、所要用到的工具,它包括了从编译到运行android应用程序所需要的各种工具。安装时可以根据自己的需求选择安装相应的版本。 3.4安装adt 按照2.3.4安装完sdk初始包后,就可以开始开发android应用程序了,但是为了更高效地进行开发,android团队推出了android development tools (adt) 。adt是目前开发android应用最有效的工具,它是一个eclipse插件,支持eclipse 3.4及3.4以上的版本。以eclipse 3.5 (galileo)为例,安装过程如下: 1. 打开eclipse,选择 help install new softare

20、。 2. 在available software 对话框中,点击add.。 3. 在弹出的add site 对话框中,任意填写一个名字到name一栏。在location一栏,则填入这一url:“https:/dl-4. 返回到available software 窗口后,就能看到列表中出现了developer tools ,选中它前面的复选框,再点击“next”,就会开始下载安装adt的各种组件了。5. 安装完毕后将弹出窗口显示adt相关的各种信息以及许可协议,点击“finish“即可完成安装。6.重新启动:eclipse。3.5 创建avd在安装好jdk,eclipse,sdk,adk之后我

21、们就可以进行android项目开发了,但是在开发的过程中我们经常需要运行、调试我们所开发的软件,这就需要用到avd(android virtual device),也就是android虚拟机。1. 打开eclipse。 2. 点击opens the android virtual device manager图标按钮。 3. 在弹出的窗口中点击new新建一个android虚拟机。 4. 在弹出的新建虚拟机窗口中name一栏填上虚拟机的名称(一般与虚拟机的版本号相同,便于区分)。 5. 在target一栏选择一个android虚拟机版本(如android2.2或android2.1)。 6. 在

22、sd card下的size一栏填上我们要设定的sd卡容量大小。 7. 点击create avd,这样我们的一个android虚拟机就创建好了。第四章 系统的总体设计软件功能设计是使整个软件能基本实现音乐的播放、上一首、下一首、暂停等功能能让用户通过本软件欣赏音乐。在线音乐浏览和下载背景皮肤的切换等功能更好的增强用户体验。4.1 设计思想(1)将系统分成几个相对独立的模块。 (2)分层的模块化程序设计思想,整个系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。(3)合理的数据流设计,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全

23、性。4.2 系统功能结构图根据上述需求分析,本android版音乐播放器可分为一下几个模块: 图4.2.1播放器基本功能图4.2.2播放清单列表图4.2.3系统流程图功能类别子功能子功能播放列表播放列表菜单退出播放从扩展卡寻找歌曲歌曲菜单播放-进入播放界面删除-数据库同步更新重命名-数据库同步更新向上、下移动-数据库同步更新播放界面播放播放歌曲-线程启动-时间更新暂停暂停歌曲-线程暂停-时间暂停停止停止歌曲-线程停止-时间停止上一首播放列表索引变化-寻找上一id歌曲下一首播放列表索引变化-寻找下一id歌曲播放界面菜单返回到播放列表返回到主菜单从扩展卡寻找歌曲退出播放器隐藏播放界面主菜单退出程序

24、程序退出进入播放列表显示播放列表表4.2.1系统功能表图4.2.4音乐播放器 e-r图图4.2.5音乐播放器菜单结构图第五章 音乐播放器的详细设计 5.1项目ui篇1.先实现播放页面的ui设计(包括控制按钮和专辑图片) 布局代码 main.xml2.播放列表的实现 布局代码 playlist.xml基本效果 如下图: 其中播放按钮采用xml文件,在按下和得到焦点的时候会做相应的改变selector xmlns:android= 5.2开机动画页面的设计5.2.1 设计步骤1. 准备2个 动画xml文件 log.xml log_two.xml2. 当动画结束时 启动另外一个activity3.

25、动画特效是两个imageview同时采用 淡入,旋转和,缩放的特效 调用动画的方法代码animation animation=animationutils.loadanimation(logo.this, r.anim.logo);5.2.2效果图5.3基本代码的编写5.3.1在service 里定义一系列关于播放状态的常量public static final int cmd_default = -1;/默认public static final int cmd_start = 0;/开始public static final int cmd_pause = 1;/暂停public stat

26、ic final int cmd_resume =3;/继续播放public static final int cmd_next = 4;/下一首public static final int cmd_prev = 5;/前一首public static final int cmd_seek = 6;/移动到某一播放位置public static final int cmd_jump = 7;/选择列表歌曲 播放public static final int status_playing = 0;/播放状态public static final int status_paused = 1;/暂

27、停状态public static final int status_stopped = 2;/停止状态5.3.2注册广播接收 以及定义广播的actionpublic static final string music_control = miniplayer.action_control;public static final string update_status = miniplayer.action_update_status;public static final string update_time = miniplayer.action_update_time;public st

28、atic final string update_info = miniplayer.action_update_info;在oncreant里注册广播/ 注册receiver-可以xml注册,也可以代码注册。代码注册,当程序退出,相关广播也就无效了docommand = new commandreceiver();intentfilter filter = new intentfilter();filter.addaction(music_control);registerreceiver(docommand, filter);注意:在结束时 解除广播的注册 public void onde

29、stroy() unregisterreceiver(docommand); super.ondestroy(); savestatus(); 5.3.3写发送广播(前歌曲的信息及状态)的一些方法 / 发送更新的播放状态private void updatestatus()/ 发送更新的歌曲信息private void updateinfo()/ 发送跟新的播放时间private void updatetime() 5.3.4播放控制代码的编写 init()方法主要是 初始话音乐数据 其次就是在广播里面调用相应的方法play( ) pause( ) previce( )next( )最后注意:

30、在manifest中注册service5.4主页面的代码实现5.4.1 初始化页面的一些基本控件写3个广播接收的broadcastreceiver分别接收当前歌曲的信息 状态 以及播放时间private statusupdatereceiver dostatusupdate;private timeupdatereceiver dotimeupdate;private infoupdatereceiver doinfoupdate;在oncreat这些broadcastreceiver用于更新页面歌曲当前信息接下来是各个按钮的点击事件public void btclick()5.4.2 see

31、kbar的更新与监听 首先在service里写更新进度条的方法updateprogress( ) 方法主要就是开辟一个线程 每隔一秒钟更新一次当前时间并且在方法中实现mediaplayer的监听当一首音乐播放完成时,去播放下一首然后就是在activity里对seekbar的监听 拖拽到某一位置播放核心代码seekbar.setonseekbarchangelistener(new onseekbarchangelistener( )if (isenable = false & math.abs(prog - progress) = 5) progress = prog;intent i = n

32、ew intent(musicservice.music_control);int cmd = musicservice.cmd_seek;i.putextra(cmd, cmd);i.putextra(progress, progress);sendbroadcast(i);sb.setprogress(progress);5.5播放列表页面的实现5.5.1适配器的创建 第一个适配器musicinfoadapter()在做适配器之前需要准备 item的布局文件music_list_item.xml其次是viewholder类的创建 静态类中的对象只会掉用一次 所以我们布局中的imagevie

33、w和textview等控件要在静态类中创建。可以减少内存的使用适配器的核心方法就是getview( )的使用其中convertview 的复用性是listview优化显示的核心完成适配器的创建我们就可以,调取数据来显示 效果图如下 5.5.2 musiclist 中getmultidata( )方法的创建通过游标查询系统中media表中的所有音频文件的信息,保存在map集合中吧数据放到适配器中加载 在listview中显示完成这一步我们的播放器 基本功能已经完善的差不多了!5.5.3 点击列表中的一项 跳转到播放列表 并播放当前歌曲首先是listview的itemclick事件的处理照例我们要

34、发送一个广播给service告诉我们点击的是列表中的哪一首歌曲所以要在service中写一个方法去调用游标类,查询那个歌曲的信息人后播放也就是把当前的位置 赋值给position 核心代码:intent i = new intent(miniplayerservice.music_control);i.putextra(cmd, miniplayerservice.cmd_jump);i.putextra(pos, pos);sendbroadcast(i);finish();5.6 notification功能的实现5.6.1 创建mynotification 这个类 该类的主要功能就是现实

35、通知栏及通知栏状态的信息首先要准备notifation页面的布局文件然后在那个类里吧布局装载进去/ 指定这个通知的布局文件remoteviews remoteviews = new remoteviews(context.getpackagename(),r.layout.notification);5.6.2在activity中调用notifation这个类当我们按下播放按钮 ,就要调用notifation当我们拉开通知栏,点击notifation视图,进入到播放页面其中会调用一个方法/ 指定点击通知后跳到那个activitynotification.contentintent = pend

36、ingintent.getactivity(context, 0, new intent(context,playactivity.class),pendingintent.flag_update_current);5.7菜单功能的实现1.在主activity重写父类的方法oncreateoptionsmenu()2.在oncreateoptionsmenu中添加各种按钮menu.add(menu.none, - 所在组的idmenu.first + 1, -菜单项的id5, - 在菜单栏的顺序 刷新曲库 -菜单项的名字).seticon(android.r.drawable.ic_menu_

37、search);-指定菜单对应的图片当我们点击菜单中的某一项时要进行相应的处理这里就需要从重父类的onoptionsitemselected(menuitem item) 我们可以根据item.getitemid()来分辨那个是我们点击的菜单,因为我们在创建菜单的的时候,就已经吧id给写了 所以那get的id跟那个id对比就能知道那个是我们点击的菜单。5.8 appwidget的实现5.8.1 appwidget布局页面实现如图所示的布局效果布局文件 appwidgetlayout.xml写完布局文件定义appwidgetprovideinfo的元数据,需要定义为xml文件,一般在res/下面

38、新建个xml目录,然后新建appwidget_info.xml主要有以下属性 updateperiodmills 为执行更新时间,1.5以后默认好像要半小时(测试下基本不能时时更新)android:previewimage=drawable/preview和 android:resizemode 3.0以上才能使用 定义显示图标android:initiallayout=layout/example_appwidget 为该app widget页面显示的内容5.8.2 appwidget类的创建定义一个appwidgetprovider 得子类在manfiest中注册appwidget app

39、 widget 是通过广播机制进行传播的eiver android:name 定义的appwidgetprovider类action android:name 因为通过广播机制实现,所以 默认的action不能变,主要有android:resource 调用一个appwidget之后我们要去重写父类的几个方法public void onreceive(context context, intent intent) onreceive方法就是接受系统相应的广播 public void onupdate(context context, appwidgetmanager appwidgetmana

40、ger,int appwidgetids) onupdate( )就是当我们点击桌面的appwidget的控件时 调用的相应的方法写完了这些我们就要在service中去注册相应的广播接受 去控制当前的音乐播放首先要在service中的oncreat方法中注册相应的广播/注册appwidgetn广播intentfilter filter1 = new intentfilter();filter1.addaction(com.tarena.playmusic);filter1.addaction(com.tarena.nextone);filter1.addaction(com.tarena.lastone);filter1.addaction(com.tarena.startapp);re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论