Android系统是基于Linux内核的一个操作系统。而它采用的Linux内核,这套系统的开源性有及其良好的拓展性,任何的开放手机联盟的成员都可以任意的使用它的SDK包。它不仅仅具有出色的开发、调试环境,而且还有很多强大的多媒体技术的支持和扩展,在很多方面都为用户提供了非常方便的使用环境和功能。Android平台作为一个新兴的手机开发平台在当今这个迅速发展的时代里,其显著而优秀的能力。
本文阐述了一种Android手机平台的录音播放器的设计方案。首先是介绍了Android的技术背景和意义,描述了Android的关键技术和在未来的发展趋势。然后在介绍了如何在计算机上搭建Android的开发平台,是一套基于Android平台的手机录音与播放软件的设计方案,这个软件分为录音界面和播放器验证界面。在软件系统上使用AVD虚拟机成功的编码和测试了Android录音播放软件,实验的结果充分的表明了以Android系统为基础的开发程序是拥有非常优秀能力,而且在真机上的成功安装使用更是表明了Android程序在日常生活中能够起到的作用,在未来的开发和应用上,Android的平台更是能够作出更大的贡献。
关键字:Android;智能手机平台;录音软件
Android platform as an emerging mobile development platform in today's era of rapid development, significant and outstanding ability. The Android system is the kernel of a Linux-based operating system. It uses the Linux kernel, the open source nature of this system and its expansion, the any of the Open Handset Alliance members can use its SDK package. It not only has excellent development and debugging environment, and there are many powerful multimedia technology support and expansion in many ways to provide users with a very easy to use environment and function.
This paper describes the design of the recording of an Android mobile phone platform player. The first is to introduce the Android technical background and significance, and describes the Android critical technology and the development trend in the future. And then describes how to set up Android development platform on your computer is set based on the Android platform for mobile recording and playback software design, software verification interface is divided into the recording interface and player. Use the success of the AVD virtual machine coding and testing Android recording playback software on the software system, the experimental results fully demonstrated the development program is based on the Android system has a very good ability, and successful installation on the real machine is that the Android application role it plays in their daily lives, Future development and application of the Android platform is able to make greater contribution.
Keywords:Android; Smart phone platform;Recording Software
目 录
1.1 课题的研究背景和意义........................................................... 1
1.2 研究开发内容........................................................................... 2
1.2.1主要开发内容...................................................................... 2
1.2.2论文内容.............................................................................. 3
2 系统开发环境及相关技术.............................................................. 4
2.1 Android开发环境介绍.............................................................. 4
2.2 Android开发平台搭建.............................................................. 4
2.3 Android的API........................................................................... 5
3 系统分析和设计.............................................................................. 8
3.1 系统分析................................................................................... 8
3.1.1 研究目标............................................................................. 8
3.1.2 需求分析............................................................................. 8
3.1.3 性能分析............................................................................. 8
3.2 界面设计................................................................................... 8
3.3 Activity切换............................................................................... 9
3.4 musicplayer的常用方法介绍.................................................. 11
3.5 程序模块设计......................................................................... 12
4 程序开发........................................................................................ 13
4.1 Activity分类............................................................................. 13
4.1.1 语音播放器....................................................................... 13
4.1.2 语音的录入....................................................................... 16
4.2 用户界面................................................................................. 18
5 系统测试与结论............................................................................ 19
5.1 系统测试................................................................................. 19
5.2 结论......................................................................................... 21
致 谢.............................................................................................. 22
参考文献............................................................................................ 23
附录1 真机测试图......................................................................... 24
附录2 毕业设计作品说明书......................................................... 25
附录3 系统主要源代码................................................................. 26
1概述
1.1 课题的研究背景和意义
Android平台因为开放性使得这个平台具有非常好的发展前景。开发商在网上评测出使用的全球移动手机开发使用最多的平台调查结果显示:市场上最为火热的是Linux平台,这款移动平台是大家最主要选择的开发平台,它在全球的市场份额占到了30%,当然这与Android的开放性有很大的关系。而且Android智能手机的市场份额在2011年9月份的时候就已经一举超过了iPhone平台,成为了仅次于Symbian平台的全球第二大手机操作系统,而这一历史性时刻比一些专家的预测缩短了两年多的时间[1]。
2010年已经成为了Android元年,而且这个势头已经蔓延到了中国市场。IOS平台在赚钱方面对许多的开发者而言吸引力是相当巨大的,很多开发者毫不犹豫的投身到了Android平台开发,虽然现在在开放式的开发平台上的赚钱机会已经变得越来越小,但是这个平台已经平稳的度过了高峰期,很多开发者和开发商都在酝酿在这个平台做出具备杀伤力的产品,投身平台的开发者都已经做足了充分的准备,所以这个平台在未来的前景是非常可观的,因此Android在最新的开发研究上的排名第一已经是不足为奇[2]。
Strategy Analytics分析师亚历克斯-斯贝克特(Alex Spektor)表示:“今年第二季度,Android智能手机出货量达到了创记录的6000万部,在整个手机市场上占到了19%的份额,去年第二季度全球智能手机出货量为4200万部,相比增长了43%。运营商加大购机补贴力度、高端厂商之间的竞争以及使用Symbian和Android等操作系统的低成本机型不断涌现促进了智能手机市场的增长速度超过了手机市场的平均增长速度,这个部分充分的体现了当前的世界格局中的Android的优势和能力是非常迅速的在增长,如下图1-1所示[3]。
图1-1 android手机涨幅
从这个报表大家可以看到08年度第四季度与09年度第四季度的对比,Android智能手机市场的销售量已经上涨了15%,从报表上面我们看到整个09年度整个智能手机市场都是呈现出一片上涨趋势,全年的出货量达到1.738亿部手机。而且从10年开始,单单从第一季度和第二季度我们就能看出来上涨速度变得非常迅速,从09年第一季度跟10年的第一季度同期相比增长比就已经到达了1.487:1,从10年第二季度跟09年第二季度对比我们就能看出来比例依然是1.43:1,所以从这个趋势来看未来肯定是智能手机占主导方向地位 [4]。
安卓在全球市场的成长壮大,而塞班在全球市场份额不断下跌已经成为不争的事实。安卓操作系统发展迅猛主要得益于免费、开源和良好的产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。代码的开源让更多的开发者开始进行应用开发;应用的丰富吸引到了更多用户选择Android平台。此外,谷歌通过OHA联合众多厂商进行系统研发,将系统应用推广到更多的终端产品中,确保用户体验的持续改善。
1.2 研究开发内容
1.2.1主要开发内容
Android平台3G手机录音软件是基于Android手机平台,运用Java语言,从手机上直接录取原音文件,可以进行重要信息的存入,也可以在会议中使用,非常方便。Android平台3G手机录音软件的开发可以把原有的录音工具丢弃,只需要随身携带一只小巧的Android手机,就可以随时随地的进行语音的录入,同时也可以增强对社会语音资料方面的重视,提供在公共场合的一些方便措施,能够为日常的会议,开幕式做好防范,随时可以代替专业的录音笔等器材。想一想,随身携带一只具备了多种功能的手机,远远要比携带一台巨大的设备要方便很多。
在Android的录音写入文件当中,存在着MediaRecorder和MediaPlayer类,还有AudioRecord和AudioTrack类。由于在封装的使用和录音的播放上AudioRecord和AudioTrack类的使用比较麻烦,而且不是都能够获得成功,所以就采取了MediaRecorder和MediaPlayer类作为本次代码编写的首选方案。
1.2.2论文内容
本文共分为五章,主要介绍了关于录音软件在Android平台上的开发使用,通过MediaRecorder和MediaPlayer类实现外部录音的功能。第一章介绍了Android最近几年以来的发展趋势和未来前景;第二章介绍了Android开发平台的搭建和API的部分模块介绍;第三章对Android语音录入播放器的可实现性进行了分析和大致上的规划,在Activity切换的行为上进行了叙述;第四章介绍了软件的设计思路和整体软件的过程;第五章对Android录音播放器进行了测试和验证,并且给出了实验过程中的经验和心得想法。
2 系统开发环境及相关技术
2.1 Android开发环境介绍
Android的上层应用程序是使用的Java语言开发,同时还需要基于Dalvik虚拟机。所以,Google公司推荐使用主流的Java去继承开发环境Eclipse。不过只有Eclipse还是远远不够的,因为是使用Java语言进行开发,所以这部分还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。在Eclipse上安装一个AVD的虚拟机也是必要的。同时,还需要在Eclipse安装ADT,使得在有更新程序的时候可以能够为Android开发提供开发工具的升级或者变更,也是Eclipse下开发工具的升级下载的工具[5]。
简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。
(1) Java SDK
(2) Eclipse
(3) Android SDK
(4) ADT
2.2 Android开发平台搭建
Android开发平台搭建步骤:
在配置安卓的环境是要先搞定里面的ADT和SDK的安装,所以首先要先进行的是ADT的安装。
启动Eclipse后,然后选择菜单里面的Help->Install New Software;在弹出窗口中,点击Add按钮,Name随便填写(比如Android),Location一栏填写(ADT 的plus-in网址),http://dl-ssl.google.com/android/eclipse/,然后点击OK;等待在线更新可用列表,然后会跳出一个对话框,在下面的列表框中的Developer Tools中选择并安装Android DDMS(Android Dalvik Debug Moniter Server)和Android Development Tools(ADT);选择Next后,接受安装协议,点击Finish,进入漫长的等待时间,然后就安装完成。完成后界面会提示重启Eclipse,这个时候只需要点击Restart Now就可以了。
完成了ADT的安装之后就可以开始配置SDK:点击Eclipse菜单,Windows->Preferences,然后点击左侧的Android设置项;在右侧的SDK Location里填入我们上文解压的SDK目录C:\Program Files\android-sdk-windows,点击确定,然后再继续选择刚才解压完的Android SDK文件夹所在目录;点击菜单Window->Android SDK and AVD Manager;在弹出窗口中,点击Update All按钮,会弹出可选的程序包版本,不过不用全部都安装,只需要安装以下几个就可以了:
Android SDK Tools, revision x;
Android SDK Platform-tools, revision x;
Documentation for Android SDK, API xx, revision x;
SDK Platform Android x, API x, revision x;
Samples for SDK API x, revision x;
Android Compatibility package, revision x。
上面的这些都完成之后就可以开始配置虚拟机了。
点击菜单Window->Android SDK and AVD Manager;点击左侧的Virtual Devices,新建AVD(Android Virtual Devices = AVD,Android虚拟设备);点击“New...”按钮,弹出“Create new Android Virtual Device(AVD)”对话框;在Name中输入:Android-AVD,Target中选择(这个API版本要选对,跟上文对应):Android 2.2 - API Level 8;Skin里Build-in屏幕大小建议选的小一点,尽量不要选择那些大屏幕的,不然在读取的时候可以能会要很长的等待时间,甚至导致无法读取出虚拟机,笔记本可能会满屏高度,但是满屏会导致不好操作;其它选项按照默认即可(后续仍可以随时修改,点击右侧的Edit按钮)点击“Create AVD”按钮即可;可以点击右侧的Start...进行测试,弹出窗口中点击Launch启动虚拟机,AVD加载很慢,所以一般花费2.3分钟也是很正常的事情[6]。
2.3 Android的API
Manifest element:开发Android应用程序时,了解该平台API变更管理的基本方法和概念是很有帮助的。同样的,在知道了API级别标识以及该标识如何保障应用与实际硬件设备相兼容对于开发及后续的发布、维护都是有益的。
Android里面的API级别取值都是一个整数值,而且它是唯一一个标识了一个具体版本的Android平台,以及框架的API的版本。
Android平台为广大的研发者提供了一整套完整框架的API,使得Android平台上的应用程序可以与系统底层进行交互。API由以下一些模块组成:
(1) 一组核心的包和类;
(2) 清单(Manifest)文件的XML元素和属性声明;
(3) 资源文件的XML元素和属性声明及访问形式;
(4) 各类意图(Intents);
(5) 应用程序可以请求的各类授权,以及系统中包含的授权执行。
每个Android平台的后续版本会包括它提供的更新的Android应用程序框架的API。该框架的API的更新设计,使高版本的API与早期版本兼容。也就是说,在新版本API中大多数都是新增功能,和引进新的或替代的功能。作为API的部分升级,老的替换的部分已过时,但不会从新版本中删除,使得已有的应用程序仍然可以使用它们。在极少数情况下,旧版本API的部分可能被修改或删除,通常这种变化是为了保障API的稳定性及应用程序或系统的安全。所有其他早期版本的API将不做修改的保留。
Android:minSdkVersion—指明该应用程序可以运行的API最低版本,默认是“1”。
Android:targetSdkVersion—指明该应用程序设计时期望运行的目标API版本。在某些情况下,这允许应用程序使用目标API级别下定义的清单元素或行为,而不是只限于使用最低API级别定义的内容。
Android:maxSdkVersion—指明该应用程序可以运行的最高API级别。重要声明: 使用该属性之前请阅读文档。比如,要指明一个应用程序能够运行的最低API级别,应当在该应用程序的清单文件的元素中加入Android:minSdkVersion属性。Android:minSdkVersion的值是一个正整数,对应的是该应用程序能够运行的最低平台的API级别标识。用户尝试安装一个应用程序,或者在系统升级后重验证应用程序的时候,Android系统首先会检查应用程序的清单文件中的属性,将其与系统内部API级别对比。系统只有在满足下列情况时才允许进行应用程序安装[。
如果声明了Android:minSdkVersion属性,那么其属性值就必须要小于或等于该系统的API级别对应的值。如果系统没有发表声明,那么系统就会默认该应用Android的程序运行需要的最低API级别是1。
如果声明了Android:maxSdkVersion属性,那么其属性值就要必须等于或大于该系统的API级对应的值。如果系统没有发表声明,那么系统会默认该应用程序没有最高API的级别限制。
3 方案设计
3.1 系统分析
3.1.1 研究目标
(1) 学习、了解Android应用程序的设计并且基础掌握其开发过程。
(2) 掌握和使用Android代码进行Android 平台上的3G手机录音软件开发。
本软件是基于Eclipse的开发环境,直接在Eclipse进行编程和调试过程,最终下载到手机上可以实现功能。
3.1.2 需求分析
本软件是一个设计界面简洁干净的录音软件,具有双向的Activity操作,一个是语音播放界面可以点击按钮进入到录音界面,另外一个是可以从录音界面返回到语音播放界面。并且音乐库是设定在SD卡的根目录下,每次打开程序都会自动更新音乐库,并且显示所有amr后缀的音乐文件。
从上面的描述中可以基本了解软件的功能需求:
(1) 启动主菜单应用程序;
(2) 设置界面:进行语音、播放界面的切换,能够简单的对程序进行操作;
(3) 显示界面:通过文字显示当前的录音情况和保存地址。
3.1.3 性能分析
要求能够迅速简洁的使用录音软件,到达使用方便,检验简单的程度,无论何时何地都可以自由应用。
3.2 界面设计
根据软件程序的需求分析,这个应用程序应该要包含两个主要的用户界面,在这里,就是更进一步的来分析在这两个的用户界面里面,每一个用户界面需要包括哪一些的内容,应该怎么样的来添加使用。
每次进入播放界面时,播放程序都会自动搜索手机的SD卡根目录下面的音乐文件,由于代码设置的过滤模式,所以只能够看见有AMR后缀的文件的文件名。
在录音界面中,在录音的过程中程序需要提示用户此次录音文件的保存地址和文件的保存文件名,以方便用户寻找和使用关于此次录音的播放文件。在进入录音界面之后,可以点击实现录音的效果,在录音界面的Activity按钮可以返回播放界面,同时还设立了返回值,可以回到首页面去进行播放的验证,相当是设置了一条快捷通道。
在音乐播放器中,需要在列表里显示出所有的在手机SD卡根目录下的音乐,所以需要划分一块区域来显示,其中就显示为文件名加音乐文件格式的后缀。
在录音的程序里面,设置了给用户看的录音文件的保存提示界面,可以让用户看见文件的自动保存文件名以及录音文件的保存地址,让用户在使用录音文件的时候更加的方便,也使录音程序更加的贴心,下面就是根据对用户界面显示内容的分析,绘制出用户界面的草图,如图3-1所示。
(a) 播放界面 (b) 录音界面
图3-1 用户界面草图
3.3 Activity切换
一个应用程序通常都是由多个Activity组成。因此当用户启动一个应用程序时见到的第一个交互界面(Activity)就叫做主Activity。为了完成相应的动作,一个Activity的操作界面里可以启动另一个Activity,每当启动一个新的Activity,前一个另外的Activity就将停止,但是系统将仍然保存这个对象在后台栈(back stack)里面。当启动一个新的Activity,它就放入back stack中,并且获得用户焦点。Back stack遵循后进先出原则,所以当用户按手机上的back按钮时,当前的Activity将会从back stack中移除,前一个Activity线程就将被恢复 [8]。
表3-1更加详细的列出了Activity生命周期中各个方法的详细描述以及系统在调用相应方法后能否杀死对应的Activity。
表3-1 Activity 生命周期描述
方法 | Killable after | 下个调用法 | 描述 |
onCreate() | NO | onStart() | 在Activity第一次创建的时候调用。在这个方法里你应当做所有全局的操作,比如创建视图,填充Activity需要的数据等。这个方法通过Bundle对象获取前一个Activity的数据。 |
onRestart() | NO | onStart() | 在Activity停止后,再次被启动前调用活动结束后已经停止,之前被再次启动调用。 |
onStart() | NO | onResume()或onStop() | 刚好在Activity将要被用户可见前调用,此时还不可以看到Activity所代表的界面。 |
onResume() | NO | onPause() | 当Activity所代表的页面可见的时候调用,在这个时候,该Activity位于Activity栈顶,拥有用户输入焦点。 |
onPause() | YES | onResume()或onStop() | 当系统启动另一个Activity时调用。这个方法通常用于持久化未保存的数据的更改,停止动画,以及一些消耗CPU的操作。尽管CPU的处理速度很快,但是它必须做上述操作,应为onPause方法没有返回的话是不能创建下一个Activity。 |
onStop() | YES | onRestart()或Destory() | 当用户看不到该Activity所代表的界面时调用。这方法调用有两种情况:1.当该Activityon正在销毁。另一个Activity启动或恢复并覆盖当前Activity。 |
onDestory() | YES | 无 | Activity正在销毁时调用,这是一个Activity生命周期中接受的最后一个回调方法。在正在调用Activity的finish方法前调用或者是系统内存不足导致不得不回收;想知道是哪一种销毁方式可以通过isFinishing()得知。 |
Killable after:明确指出系统是否可以在任何上述方法中执行完并返回后杀死持有当前Activity的进程。onPause,onStop,onDestory这里的三个方法被标注为YES,由于onPause方法是Activity创建后最有可能保证执行的方法,因此,当系统遇到紧急情况需要恢复内存,那么onStop,onDestory可能不被执行,因此你应当在onPause里保存一些至关重要的状态属性 [9]。
当一个Activity启动转换到另一个Activity的时候,它们都会经历它们生命周期的转变。当另一个Activity被创建,那么第一个Activity将暂停和停止。Activity生命周期回调方法的调用顺序在上述文档中已经做了很好的定义。
3.4 musicplayer的常用方法介绍
实例化一个AudioTrack同样要传入几个参数
(1) StreamType:在AudioManager中有几个常量,其中一个是STREAM _MUSIC;
(2) SampleRateInHz:最好和AudioRecord使用的是同一个值;
(3) ChannelConfig:同上;
(4) AudioFormat:同上;
(5) BufferSize:通过AudioTrack的静态方法getMinBufferSize来获取;
(6) Mode:可以是AudioTrack.MODE_STREAM和MODE_STATIC。
然后下面就描述一些经常需要用到的方法以及其解释[10]:
方法:create(Context context, Uri uri);
解释:静态方法,通过Uri创建一个多媒体播放器。
方法: getCurrentPosition();
解释:返回 Int, 得到当前播放位置。
方法:isLooping();
解释:返回 boolean ,是否循环播放。
方法:isPlaying();
解释:返回 boolean,是否正在播放。
方法:pause();
解释:无返回值 ,暂停。
方法:setDataSource(String path);
解释:无返回值,设置多媒体数据来源(根据路径)。
方法:start();
解释:无返回值,开始播放。
方法:stop();
解释:无返回值,停止播放。
3.5 程序模块设计
从功能需求上分析可以看出,整个应用程序应划分为几个模块,分别为程序启动后的音乐播放界面,录音界面和后台的文件搜索管理。
在整个的大体结构上来说,程序的播放器是整个程序的中转界面,因为在跳转和打开应用的时候都是要显示播放器的界面。播放器在打开时就已经开始进行了SD卡内根目录下AMR文件的搜索动作。而处在后台的搜索服务就进行工作。
录音界面是有播放器中的Activity跳入的,在后台时是一直保持关闭状态的,只有在进入界面后才可以进行基本的录音服务而对需要的谈话进行数据的采集和保存。
在完成了用户的界面设计和录音界面之后,整个程序的设计阶段也就到此基本完成了。
4程序开发
4.1 Activity分类
4.1.1 语音播放器
首先语音的播放器作为一个验证的程序,是被设置在整个程序的第一个界面的,这样我们可以很清晰的看见SD卡根目录下面所有的的录音文件的是以一张列表的形式出现在我们的眼前。而且当从语音录音切换到语音播放器的时候,播放器都会自动的重新搜索一次SD下根目录的所有录音文件,从而把最新的录音文件摆到用户们的面前。而不属于录音文件的MP3等其他格式的音乐文件则会被过滤掉不显示在语音播放器的语音文件列表中。
private static final String MUSIC_PATH=new String("/sdcard/");
搜寻语音文件的默认路径。
private int currentListItem=0;
设置当前播放歌曲的索引,并给与一个初始化,使之不会属于空值,而出现一些不必要的问题。MediaScannerReceiver这个广播接收者在接收到ACTION_BOOT_COMPLETED、ACTION_MEDIA_MOUNTED 的广播时对SD卡中的音乐播放文件进行扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService能够对SD卡根目录下的录音文件进行扫描。
由于考虑到关于播放器和录音之间的切换,所以在这里需要放入一个Activity的切换以及其按钮:
btRecod=(Button) findViewById(R.id.btRecod);
btRecod.setOnClickListener(new OnClickListener();
这里是设置Activity的切换按键,并给与一个定义。
public void onClick(View v) {
try{
Intent ichange=new Intent();
ichange.setClass(musicActivity.this,luying.class);
startActivity(ichange);
musicActivity.this.finish();
}
}
这里是实现了从语音播放器中切换到语音录入的跳转,从播放器的界面指向到了录音,设置了按钮的点击进入语音录音器界面的事件,并且在跳转完成后设置了结束操作,使之不会发生死机的循环。
在完成了两个Activity之间的切换之后,可以就开始在语音播放器界面里面的设置了,首先要能够可以播放录音文件,那么就必须在这里设置好一些播放器的那些按钮功能。
void findView(){
viewHolder.start=(Button)findViewById(R.id.start);
viewHolder.stop=(Button)findViewById(R.id.stop);
viewHolder.next=(Button)findViewById(R.id.next);
viewHolder.pause=(Button)findViewById(R.id.pause);
viewHolder.last=(Button)findViewById(R.id.last);
}
这里是定义了获取按钮,将播放器所需要的停止,播放,暂停,快进和快退五个按钮都一一进行了设定。
void listener()是监听事件,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作。在 Android框架的设计中,以事件监听器(event listener)的方式来处理UI的使用者事件。Android框架提供了非常良好的UI事件处理机制。View是绘制UI的类别,每个 View物件都可以向Android框架注册一个事件监听器。每个事件监听器都包含一个回呼函数(callback method),这个回呼函数(callback method)主要的工作就是回应或处理使用者的操作。第一种也是最开始就接触的方式,通常在Activity组件的oncreate事件中直接定义,直接动作,这种方式每个控件都定义一次,通常不方便.;第二种通常是在Activity组件实现其接口,这样可以多外控件共享一个接口,这样相对方便;第三种类似第二种,这样的好处在于如果需要实现多个监听接口,这样更清晰[11]。
设置好了监听事件,就可以开始设置按钮的作用了,分别给前面添加的按钮分配应该需要使用的用途。
viewHolder.start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
}
});//listen( )监听
从代码可以看出,这个是对开始播放录音按钮的操作。另外的几个按钮的核心代码和播放键差不多,所以也就不再一一列出。
void playMusic(String path){
try {
myMediaPlayer.reset();
myMediaPlayer.setDataSource(path);
myMediaPlayer.prepare();
myMediaPlayer.start();
myMediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp) {
nextMusic();
}
});
}
}
这一段代码是在对录音文件的操作,几个按钮的绑定,以及在一个文件之后可以自动跳转到下一个文件的设定,不会让播放器一直卡在一个录音文件上。使之能够在即使无人操作的情况下也可以自动播放下去。
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem=position;
playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
}
这里处理的是用户对录音文件列表的操作,当用户点击播放列表时,播放器会对用户所需要播放的录音文件进行播放。
4.1.2 语音的录入
btBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Intent ichange=new Intent();
ichange.setClass(luying.this,musicActivity.class);
startActivity(ichange);
luying.this.finish();
}
}
}
在进行录音界面之后,当然就需要一个能够返回到播放界面的按键了,所以上面的代码就是在做一个对播放器的Activity,使得用户在录音完成之后可以回到播放器去对前面的录音进行一个检查和播放,而不需要去退出程序重新再进来操作一遍。
File file = new File("/sdcard/"+ "录音"+ new
DateFormat().format("yyyyMMdd_mmss",Calendar.getInstance(Locale.CHINA)) + ".amr");
这部分是设置了录音文件的需要保存时的名字,是以录音当时的时间来记录的,文件是AMR文件,保存在手机的SD卡根目录下。
mr = new MediaRecorder(); //创建录音对象。
mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);//从麦克风源进行录音。
mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//设置输出格式。
mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//设置编码格式。
mr.setOutputFile(file.getAbsolutePath());//设置输出文件。
以上是对录音文件的格式设置和保存位置。
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
上面两句都是作用于抛出错误,用以防止运行时崩溃。括号里的是参数,不是随便写的,要看在定义这个方法的时候,括号里的参数类型是什么,你才能往里面加什么,比如定义一个方法,方法名(参数类型 参数名)在调用这个方法的同时就必须是放入那个类型的参数,actionPerformed(ActionEvent e)是监听器接口里的方法,Java定义好的,它的实属就是ActionEvent类型的,e是定义的参数名,catch同解,是异常里面的方法,参数是某个类型的异常。
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mr != null) {
mr.stop();
mr.release();
mr = null;
recordButton.setText("录音");
Toast.makeText(getApplicationContext(), "录音完毕",
Toast.LENGTH_LONG).show();
}
}
});
这个部分是点击停止按钮后出现的设计,在点击停止按钮的同时,界面会出现一个提示框,里面显示的文字部分为录音完毕,至此,录音的大体设计也就完成了。
4.2 用户界面
ConfigureActivity的布局文件是res/layout/configure.xml,采用了LinearLayout的布局方式,布局的方式如图4-1和图4-2所示。
图4-1 播放界面 图4-2 录音界面
在绘制用户界面的里面,可以用代码来绘制也可以直接在Android的模拟图形上进行绘制,使原本比较大的工作量也减小了不少。ListActivity可以不通过setContentView( )设置布局,也不必重载onCreate( )方法,而直接将显示列表加载到ListActivity,增加了使用的便利性。在此工程中,仍然使用setContentView( )设置布局,这样做的好处是可以在界面中设置更为复杂的显示元素。
5系统测试与结论
5.1 系统测试
到现在为止,已经完成了全部的Android录音与播放工程的代码编写工作,从这里开始就将要对Android录音与播放工程进行测试,步骤及结果如下:
(1) 首先要启动Android虚拟机,在工程名Android录音与播放上点右键,然后选择“Run As”,然后选择“Android Application”。 不过Android虚拟机的启动速度比较缓慢。如图5-1所示。
图5-1 启动界面
(2) 点击屏幕下面的图标,选择“Widget”,然后选择“录音播放器”。 如图5-2所示。
图5-2 图标界面
(3) 进入录音播放器之后,就可以根据界面上的按钮来进行操作了,操作的界面算是十分的简洁。图5-3和图5-4为录音和播放器的基础界面,图5-5为正在录音时的界面,图5-6为录音结束时的界面。
图5-3 播放器界面 图5-4 录音界面
图5-5 录音开始界面 图5-6 录音结束界面
5.2 结论
经过数个月的努力,基于Android的语音录音和播放程序终于完成了。由于当初对于Android手机推出时的广大兴趣让我也对开源的Android程序产生了那么的一些兴趣和心动,从一开始什么都不懂一直摸索着去学习并且最终完成了这个实用的小软件。
在这个过程中,我学会了很多知识,比如Android环境的搭建、Intent、Activity、Service、ContentProvider,API,在这个漫长的过程中我学会了如何的去自主学习
虽然,这个软件目前运行良好,但是我觉得我自己对这个程序的设计有点简单,在整个工程上面的构思也显得粗糙了,不足以拿去进行商业操作,用户操作界面也还不够灵活,这些问题还需要今后逐一解决。这个软件还可以进一步扩展,例如可以假如一些电话中的录音,播放器也可以多增加一些其他格式的音乐的播放,让功能变得更加的强大,带给用户更好的体验和在生活上更加快捷的服务。
参考文献
[1] 景保玉.Android主导:开发商使用开发平台调查[EB/OL],[2012-4-10].
http://dev.10086.cn/news/industrynews/8735.html.
[2] 2010中国移动应用开发现状与趋势大调查[EB/OL],[2012-4-10].
http://nokia.tgbus.com/article/news/201101/20110112105752_9.shtml.
[3] 逝水流年.走马观花google SDK第二版[J].数字通信.2008,7,98(7):98-99.
[4] 操作系统:塞班疲软 安卓必将崛起[EB/OL],[2012-4-10].
http://digi.it.sohu.com/20101213/n278272412.shtml.
[5] MarkL.Murphy.BeginningAndroid2[M].APRESS,2010,8.
[6] 赵宏伟.Android NDK开发环境实现与应用[J].电脑知识与技术
2011,12,35(6):10055-10060.
[7] Android开发者指南(10) —— Android API Levels[EB/OL],[2012-4-10].
http://www.189works.com/article-16990-1.html
[8] 段琳.深入剖析Android Activity[J].信息技术.2011,8,16(8):33-34.
[9] ChrisHaseman.AndroidEssential[M].APRESS,2008,6.
[10] 李杨,冯刚,李亮,罗拥华.基于Android的多媒体应用开发与研究[J].
计算机与现代化. 2011,4,188(4):149-152.
[11] Android之事件监听[EB/OL],[2012-4-10].
http://www.hackvip.com/mobiwen/html/Mobile_218667.html
[12] Ed Burnette. Hello,Android[M].APRESS,2009,11.