基于Android手机音乐开发与实现

点赞:18343 浏览:82017 近期更新时间:2024-03-24 作者:网友分享原创网站原创

摘 要:研究了在Android手机平台下,音乐的设计与开发过程.可播放w、mp3等常见格式的音频文件,同时具备控制音乐的播放、暂停、停止、视觉外观、音量调节、播放列表和文件的管理操作等多种播放功能,同时做到软件的用户界面友好美观,并且使用简单,合乎用户操作习惯.在保证以上功能的基础上,力争尽量节省手机资源开销,保证手机用户使用的便捷性和可靠性.

基于Android手机音乐开发与实现参考属性评定
有关论文范文主题研究: 关于操作系统的论文范文素材 大学生适用: 硕士毕业论文、专科论文
相关参考文献下载数量: 48 写作解决问题: 怎么撰写
毕业论文开题报告: 文献综述、论文设计 职称论文适用: 杂志投稿、高级职称
所属大学生专业类别: 怎么撰写 论文题目推荐度: 优质选题

关 键 词:Android;手机应用;音乐

中图分类号:TN929文献标识码:A文章编号:1009-3044(2013)28-6406-05

2007年,谷歌公司发布了以Linux为内核的移动设备操作系统——Android.Android操作系统最初由AndyRubin开发[1],主要支持手机.2005年8月由Google收购注资.随后Google以Apache开源许可证的授权方式,发布了Android的源代码.2008年10月,谷歌公司发布了第一款基于Android操作系统的手机.随着不断完善和改进,Android操作系统已经逐渐应用到平板电脑及其他领域上,如电视机顶盒、数字摄像机及游戏机等设备上.2011年第一季度,Android系统在全球的移动设备市场份额首次超过Symbian系统,全球排名第一.2012年11月数据显示,Android占据全球移动设备操作系统市场76%的份额,其中在中国市场的占有率为90%.Android系统采用软件叠层(softwarestack)的架构,被划分为三部分[1].底层部分为Linux内核,它提供操作系统的基础功能,而上层应用则由其它公司自行开发,其中一部分应用系统用Ja[2]编写.目前市场上已有不少比较成熟的智能机操作系统,而占据市场主要份额的有如下几款:苹果公司的IOS(MacOSX)操作系统,诺基亚手机的SymbianOS操作系统,Microsoft的WindowsPhone7操作系统,Google公司的Android操作系统作为新生的产物,更是以其优越的开源性已被广大手机厂商采用,Android系统的开放性深受广大开发者和用户及第三方手机厂商的喜爱,也为其占据中低高端市场提供了有力条件.

本文描述了基于Android手机平台的音乐开发,为Android使用者提供更多的选择,尽量能够满足用户个性化的要求,使用户的手机更加显得生动灵活,达到让用户真正的随时随地处于音乐的旋律中.

1Android结构组成

Android操作系统主要有4部分组成:[3]:Activity(活动)、Service(怎么写作)、BroadcastIntentReceiver(广播)、ContentProvider(数据提供者).虽然系统由以上部分组,但这并不意味着每一个Android应用程序都需要这四个模块,是否需要以上各部分主要由软件业务来决定.在某些时候,只需要这四种中的几个组合成相关的应用.各个组件模块之间要进行切换必须通过一个意图Intent类来实现,StartIntent()方法主要用来在各组件之间进行跳转.Android布局如同是一个承载组件的容器,组件不同放置方式决定了应用界面是否友好,便于操作.因此,Android布局是系统开发中的一个重要环节,在Android软件开发过程中,主要有五种布局方式,它们分别为:FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局).以上布局方式可以相互嵌套,以便组成各种不同的应界面.线程也是Android系统的一个重组成部门,Android级线程之间通信主要通过相似度检测类Handler来实现.SQLite数据库是Android自带的一个小型的数据库,由于它占用资源非常低,所需内存非常小,一般仅需要几百K的内存就够用,适合在Android移动平台或嵌入式设备中使用.

在集成开发工具Eclipse上集成了插件ADT,以便用于Android系统的软件开发.当一个Android程序启动时,Eclipse会启动一个模拟器,模拟器用于模拟当前手机硬件基本功能和相关的基本操作.

1.1基于Android开发的软件目录结构

Android工程目录基本结构[4]主要包括:src(程序源代码)、gen目录、assets(系统所用到的如mp3、视频类等文件)、Res(资源文件):主要存放程序界面的布局配置(.xml)文件和图片资源.AndroidMainfest.xml是四大组建的驱动配置文件,有它的存在,Android程序的四大组件才可以正常的跳转.在gen目录中有个R.ja文件,通过它可以快速定位需要的资源,同时编译器检查R.ja列表中的资源是否被使用到,如果没有被用到,该资源将不被编译到软件中,以便减少应用程序占用的空间.

1.2AndroidMainfest.xml文件

AndroidMainfest.xml项目中的总配置文件,用于记录程序中所使用的各种组件.每个Android应用系统都要使用AndroidMainfest.xml来引导启动,AndroidMainfest.xml文件由新建的工程项目都会自动生成,它也是整个应用系统能够正常运行的核心,其中包含了AndroidSDK的版本.

2系统具体实现

2.1系统功能图

本系统的主要功能有播放音乐、搜索音乐、解析歌词、接受广播.其中播放音乐主要包括的子功能有上一首、下一首、暂停功能、播放功能,搜索音乐则包括搜索媒体歌曲和媒体歌词,解析歌词则就是解析LRC歌词,接受广播则是进行播放怎么写作和接收音乐怎么写作.系统的整体结构图如图1所示.2.2音乐E-R图

音乐的内容主要组成是播放列表、歌曲数目.而播放列表的属性是歌曲的名字和编号,由歌曲组成,歌曲的属性则包括曲目、大小、艺术家、专辑、歌曲名字、发行库、流派等,如图2所示:

2.3数据库连接

Android自带SQLite数据库,是用C语言编写的开源嵌入式数据库,支持SQL92标准,同时可运行在所有主流操作系统上运行.SQLite运行资源占用少、性能良好并且管理几乎零成本,因引在嵌入式数据库开发方面应用非常广泛.如Android、iPhone都内置了SQLite数据库.当编写相关数据库引代码后,Android会在/data/data/[PACKAGE_NAME]/databases目录下生成一个“music.db”的数据库文件.在本文中,定义MusicDBHelperextendsSQLiteOpenHelper类实现数据的基本操作.当需要打开一个数据库连接并获得数据库对象时,首先根据MusicDBHelper创建一个辅助对象,然后调用该对象的getWritableDatabase或getReadableDatabase方法获得SQLiteDatabase对象.


3系统功能详细设计及编码

3.1音乐主界面功能实现

3.1.1主界面

在Android应用系统中,用户界面框架(AndroidUIFramework)使用了MVC(Model-View-Controller)模型,即处理用户输入的控制器(Controller)、显示用户界面及应用程序的视图(View),和保存数据的模型(Model).用户界面通过布局配置文件进行布局,该文件包括各种布局方式和各种资源文件,如图像、文字、颜色等.程序通过代码对各种配置数据进行操作,以便形成不同的可视化用户界面和绚丽的视觉效果.主界面由一个Activity组成[5],每当Android应用程序启动时,activity首先执行OnCreate()方法,通过该方法执行用户界面的初始化操作.Activity有个专门用于布局的方法:Context.setContentView(StringmusiclayoutResID),参数为要加载的资源ID,该资源存放在工程目录res/layout下,在本文中,用户主界面布局文件被命名为music_rack,下面为music-rack.xml布局文件代码结构如下:

//按照绝对坐标定义布局

在本文中,通过绝对布局里嵌套两种线性布局和勾勒了该音乐的用户界面轮廓,其中实现了歌曲的标题和歌曲名的显示位置,布局设置布局的来显示歌曲标题的绝对坐标位置.在每个布局内可以设置多个Widget(窗体组件),如:等.每个窗体组件内可以有多种属性,用来设置该窗体组件的坐标、大小、背景和颜色等参数.在该音乐的用户界面中,歌词显示为居中,下面是歌词的显示的实现代码:

android:grity等于”center”android:layout_height等于”wrap_content”

android:layout_width等于”fill_parent”>

android:textColor等于”fffeeee”android:id等于”@+id/lrcText”

android:layout_width等于”wrap_content”>

3.1.2播放界面音轨的实现

在Android系统中,自带有播放音轨的组件,但该组件不能从外观界面和从功能上考满足用户的实际需求,为了实现用户的使用要求,因此本文自定义一个Lookfor音轨进度条,其实现的代码如下:

android:id等于"@+id/lookforbar"

android:layout_height等于"wrap_content"

android:paddingLeft等于"5dip"

android:layout_width等于"fill_parent"

android:paddingRight等于"5dip"

android:layout_marginLeft等于"10dip"

android:layout_marginRight等于"10dip"

android:layout_grity等于"center"

android:layout_marginTop等于"90dip"

android:progressDrawable等于"@drawable/lookfor_png"android:thumb等于"@drawable/media_player_progress_button"/>

上面的参数中android:thumb等于"@drawable/media_player_progress_button"为加载音轨进度条的图片资源.android:progressDrawable等于"@drawable/seekbar_img"为进度条引用的风格.android:layout_width等于"fill_parent"指定进度条的宽度为充满整个屏幕,而android:layout_height等于"wrap_content"指定进度条的高度为适中,根据显示所需的大小进行变化.

3.1.3播放、暂停、停止等功能实现

在Android操作系统中,已经封装了一个命名为MediaPlayer的音乐播放接口[6],该接口在执行时需要一个数据源.在本文中播放的功能主要分两部分实现:首先执行开始按钮的监听操作和通过intent调用歌曲信息;再调用play()方法进行播放.同时可在MusicPlayer中发出音乐调用pause()暂停或调用stop()停止的事件

在MusicPlayerService中接受Intent中信息,根据信息的内容通过定义onStart(Intentintent,intstartId)实现开始播放、暂停、停止等操作.

在中创建一个Intent对象,当操作发生后由MusicPlayer跳转到MusicPlayerService,然后读取歌曲文件的相关信息并压入Intent中,再传递到service中.当执行播放操作时,首先获取要播放的歌曲信息如:路径和歌曲名等信息,然后调用mediaplayer接口读取数据,并开始播放.当执行播放、暂停、停止等功能时,则只需根据相关指令进行操作即可,不需要再进行数据的读取.

3.2播放列表的实现

的播放列表主要包括歌曲名字、演唱者、歌曲时间,播放列表配置文件框架结构主要如下所示:

android:id等于"@+id/listitem"/>

android:id等于"@+id/music">

android:id等于"@+id/singer"/>

android:id等于"@+id/time"/>

在以上配置文件中,TextView用于定义每一个文本框,显示歌曲的名字和演唱者以及时间.而播放列表的功能通过调用自定义方法getMusicView(intpos,ViewconView,ViewGroupviewParent)来实现.该方法收到从存储卡中读取歌曲返回的信息后,以列表的形式显示出来,当用户打开列表时会自动搜索本地的歌曲文件,并显示在列表中,当本地没有歌曲文件时,则提示列表为空.

3.3菜单功能

在菜单功能中,该文只设置了退出选项,旨在减少程序代码的冗余,程序中的MusicMenu.ja设置一个List容器,用于存放String类型的数据,如menu.add(0,ITEM,0,"退出"),然后通过intent.setAction(MUSIC_SERVICE)传递到MusicPlayerService中去.

3.4手机扩展卡的访问

为了更好的管理音乐文件,该文专门开发了了文件浏览功能.当打开音乐文件浏览器时,可以显示文件的目录结构、歌曲文件的文件名和文件图标等信息.对于每可查看得到的文件,都可对其进行文件管理操作.因为本文的文件浏览功能是专为操作歌曲而设计的,因此通过该文件浏览器只能查看和操作音乐文件.在主菜单界面上,选择新增选项进入到文件浏览器,或者当播放列表为空时,会提示用户进入文件浏览器新增歌曲.代码实现如下所示:

publicvoidquerySdcardMusicInfo(){

if(_ids等于等于null)return;

myCur等于getContentResolver().query(

//查询存储卡内的歌曲信息

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,

newString[]{MediaStore.Audio.Media.TITLE,//歌曲标题

MediaStore.Audio.Media.DURATION,//歌曲时间

MediaStore.Audio.Media.ARTIST,//歌曲作者

MediaStore.Audio.Media.ALBUM,

MediaStore.Audio.Media.DISPLAY_NAME},"_id等于?",

newString[]{_ids[position]+""},null);

myCur.moveToFirst();

Stringname等于myCur.getString(4).substring(0,

myCur.getString(4).lastIndexOf("."));System.out.println(name);

read("/sdcard/"+name+".lrc");

}

利用Android多媒体自带的存储方法进行数据的存储[7],这样可以较好的利用系统资源,其中MediaStore.Audio.Media.TITLE代表的查找歌曲标题,MediaStore.Audio.Media.DURATION代表查找歌曲的时间,MediaStore.Audio.Media.ARTIST代表查找歌曲作者,MediaStore.Audio.Media.ALBUM,代表查找歌曲所属的专辑.

3.5仿真结果和性能测试

如下图3所示,即为的主界面,主要由歌曲名字,歌手头像、歌词、进度条和各种播放功能组成:

3.5.1播放界面音轨的实现

由于系统的Seekbar[8]通常很难满足用户的功能和感观需求,因此本文定义了一个音轨进度条.如图4所示.该进度直观明了,也便于用户操作使用.

4结论

基于Android平台的手机音乐,希望能够为用户提供一款节约手机资源,实用性强的手机音乐.在本款软件中,减少了很多不必要的功能设置,避免了界面花哨、功能庞大而带来的浪费资源的问题,所以较大的提供了软件的实用性,希望能够得到较为广泛的应用.在本次软件的开发过程中,从最初的Android开发环境搭建开始学习,因为ADT的插件要在Eclipse中连线到国外在线安装升级,所以这一部分相对消耗的时间较长,但是过程也比较简单.然后就是对Android基本框架的学习,以及熟悉Android的层次结构,并要掌握常用的配置属性.