android录音软件论文

滨江学院

毕业论文(设计) 题目Android录音软件开发

院系滨江学院计算机系

专业软件工程

学生姓名张三

学号20092322922

指导教师孙菁

职称副教授

二O一三年五月二十日

声明

本人郑重声明:

1、持以“求实、创新”的科学精神从事研究工作。

2、本论文是我个人在导师指导下进行的研究工作和取得的研究成

果。

3、本论文中除引文外,所有实验、数据和有关材料均是真实的。

4、本论文中除引文和致谢的内容外,没有抄袭其他人或其他机构

已经发表或撰写过的研究成果。

5、其他同志对本研究所做的贡献均已在论文中作了声明并表示了

谢意。

作者签名:

日期:

目录

1概述 (1)

1.1 课题的研究背景和意义 (1)

1.2 研究开发内容 (2)

2 系统开发环境及相关技术 (3)

2.1 Android开发环境介绍 (3)

2.2 Android开发平台搭建 (3)

2.3 Android的API (4)

2.4 Android 基本框架(Android Architecture) (5)

3 方案设计 (6)

3.1 系统分析 (6)

3.1.1 研究目标 (6)

3.1.2 需求分析 (7)

3.1.3 性能分析 (7)

3.2 界面设计 (7)

3.3 Activity切换 (8)

3.4 MediaRecorder的常用方法介绍 (10)

3.5 MediaPlayer的常用方法介绍 (11)

3.5 程序模块设计 (11)

4程序开发 (12)

4.1 Activity分类 (12)

4.1.1 用户界面 (12)

4.1.2 语音的录入 (15)

4.1.3 语音播放 (18)

5系统测试与结论 (23)

5.1系统测试 (23)

5.2真机测试图 (25)

5.3结论 (26)

参考文献 (27)

致谢 (28)

Android录音软件的开发

张三

南京信息工程大学滨江学院,南京 210044

摘要:本文主要介绍了手机录音软件的开发,语音的录入,保存,播放。用户使用该软件可以随时随地的收录当前身边的声音,重要的会议。它不需要用户带更多的设备,只需要带一个android智能手机装上这款录音软件就可以实现录音。用户可以对存取的录音记录进行做标签,删除之前的录音记录,添加录音。用户所录音的记录会直接保存在手机SD卡中,同一张卡换个手机就可以播放之前录音记录,无需担心因手机损坏导致录音无法播放的问题。它代替了传统的录音设备,使录音更加方便快捷,界面人性化。增加了现代生活的乐趣,对于一些重要的会议也只需轻轻一点即可完成全部会议内容,代替了用手写来记录会议内容的不便。手机录音软件是现代化生活必不可少的一个具有重要性的产品。

关键词:Android;智能手机;录音软件

1概述

1.1 课题的研究背景和意义

Android平台因为开放性使得这个平台具有非常好的发展前景。开发商在网上评测出使用的全球移动手机开发使用最多的平台调查结果显示:市场上最为火热的是Linux平台,这款移动平台是大家最主要选择的开发平台,它在全球的市场份额占到了30%,当然这与Android的开放性有很大的关系。而且Android 智能手机的市场份额在2011年9月份的时候就已经一举超过了iPhone平台,成为了仅次于Symbian平台的全球第二大手机操作系统,而这一历史性时刻比一些专家的预测缩短了两年多的时间。

2010年已经成为了Android元年,而且这个势头已经蔓延到了中国市场。IOS平台在赚钱方面对许多的开发者而言吸引力是相当巨大的,很多开发者毫不犹豫的投身到了Android平台开发,虽然现在在开放式的开发平台上的赚钱机会已经变得越来越小,但是这个平台已经平稳的度过了高峰期,很多开发者和开发商都在酝酿在这个平台做出具备杀伤力的产品,投身平台的开发者都已经做足了充分的准备,所以这个平台在未来的前景是非常可观的,因此Android在最新的开发研究上的排名第一已经是不足为奇。

Strategy Analytics分析师亚历克斯-斯贝克特(Alex Spektor)表示:“今年第二季度,Android智能手机出货量达到了创记录的6000万部,在整个手机市场上占到了19%的份额,去年第二季度全球智能手机出货量为4200万部,相比增长了43%。运营商加大购机补贴力度、高端厂商之间的竞争以及使用Symbian 和Android等操作系统的低成本机型不断涌现促进了智能手机市场的增长速度超过了手机市场的平均增长速度,这个部分充分的体现了当前的世界格局中的Android的优势和能力是非常迅速的在增长,如下表1-1所示。

表1-1 android手机涨幅

从这个报表大家可以看到11年度第四季度与12年度第四季度的对比,Android智能手机市场的销售量已经上涨了15%,从报表上面我们看到整个12年度整个智能手机市场都是呈现出一片上涨趋势,全年的出货量达到1.738亿部手机。而且从13年开始,单单从第一季度和第二季度我们就能看出来上涨速度变得非常迅速,从12年第一季度跟13年的第一季度同期相比增长比就已经到达了1.487:1,从13年第二季度跟12年第二季度对比我们就能看出来比例依然是1.43:1,所以从这个趋势来看未来肯定是智能手机占主导方向地位。

安卓在全球市场的成长壮大,而塞班在全球市场份额不断下跌已经成为不争的事实。安卓操作系统发展迅猛主要得益于免费、开源和良好的产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。代码的开源让更多的开发者开始进行应用开发;应用的丰富吸引到了更多用户选择Android平台。此外,谷歌通过OHA联合众多厂商进行系统研发,将系统应用推广到更多的终端产品中,确保用户体验的持续改善。

1.2 研究开发内容

Android平台3G手机录音软件是基于Android手机平台,运用Java语言,从手机上直接录取原音文件,可以进行重要信息的存入,也可以在会议中使用,非常方便。Android平台3G手机录音软件的开发可以把原有的录音工具丢弃,只需要随身携带一只小巧的Android手机,就可以随时随地的进行语音的录入,同时也可以增强对社会语音资料方面的重视,提供在公共场合的一些方便措施,能够为日常的会议,开幕式做好防范,随时可以代替专业的录音笔等器材。想一想,随身携带一只具备了多种功能的手机,远远要比携带一台巨大的设备要方便很多。

在Android的录音写入文件中,存在着MediaRecorder和MediaPlayer类,还有AudioRecord和AudioTrack类。由于在封装的使用和录音的播放上AudioRecord和AudioTrack类的使用比较麻烦,而且不是都能够获得成功,所以就采取了MediaRecorder和MediaPlayer作为本次代码编写的首选方案。

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上安装一个A VD的虚拟机也是必要的。同时,还需要在Eclipse安装ADT,使得在有更新程序的时候可以能够为Android开发提供开发工具的升级或者变更,也是Eclipse下开发工具的升级下载的工具。

简言之,需要以下软件,才能搭建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网址),https://www.360docs.net/doc/594326475.html,/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 A VD 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 A VD Manager;点击左侧的Virtual Devices,新建A VD(Android Virtual Devices = A VD,Android虚拟设备);点击“New...”按钮,弹出“Create new Android Virtual Device (A VD)”对话框;在Name中输入:Android-A VD,Target中选择(这个API版本要选对,跟上文对应):Android 2.2 - API Level 8;Skin里Build-in屏幕大小建议选的小一点,尽量不要选择那些大屏幕的,不然在读取的时候可以能会要很长的等待时间,甚至导致无法读取出虚拟机,笔记本可能会满屏高度,但是满屏会导致不好操作;其它选项按照默认即可(后续仍可以随时修改,点击右侧的Edit按钮)点击“Create A VD”按钮即可;可以点击右侧的Start...进行测试,弹出窗口中点击Launch启动虚拟机,A VD加载很慢,所以一般花费2-3分钟也是很正常的事情。

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的级别限制。

2.4 Android 基本框架(Android Architecture)

Android Architecture(android 软件结构图)

其软件层次结构自上而下分为以下几个层次

第一、应用程序(Application)

第二、应用程序框架(Application Framework)

第三、各种库(Libraries)和Android运行环境(RunTime)

第四、操作系统层

(1)Application

Application Android 会同一核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JA V A编写的。

(2)Application FrameWork

开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其所发布的功能块(不过的遵

循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。

所有的应用程序都由一系列的服务和系统组成,包括:

可扩展的视图(Views)可以用来建应用程序,包括列表(lists),网格(Grids),文本框(Text boxes),按钮(button),甚至包括另一个可嵌入的web浏览器。

内容管理器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人的数据库),或者共享它们自己的数据。

资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(Layout Files)。

知管理器(Notification Manager)使得应用程序生可以在状态栏中显示客户通知信息。

活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

(3)

Libraries库

Android包括一个被Android系统中各种不同组件所使用的C/C++库集。该库通过Android应用程序框架为开发者提供服务。

Android Runtime

Android包括了一个核心库,该核心库提供了JA V A编程语言核心库的大多数功能。

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik 是针对于同时高效地运行多个VMS来实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JA V A汇编器编译,然后通过SDK 中的dx工具转化成.dex格式由虚拟机执行。

Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。

(4)Linux内核

Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议和驱动模型。Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。

3 方案设计

3.1 系统分析

3.1.1 研究目标

(1) 学习、了解Android应用程序的设计并且基础掌握其开发过程。

(2) 掌握和使用Android代码进行Android 平台上的3G手机录音软件开发。

本软件是基于Eclipse的开发环境,直接在Eclipse进行编程和调试过程,最终下载到手机上可以实现功能。

3.1.2 需求分析

本软件是一个设计界面简洁干净的录音软件,具有双向的Activity操作,一个是语音播放界面可以点击按钮进入到录音界面,另外一个是可以从录音界面返回到语音播放界面。并且录音文件是设定在SD卡的根目录下,并且显示所有有mp3后缀的音乐文件。

从上面的描述中可以基本了解软件的功能需求:

(1) 启动主菜单应用程序;

(2) 设置界面:进行语音、播放界面的切换,能够简单的对程序进行操作;

(3) 显示界面:通过文字显示当前的录音情况和保存地址。

3.1.3 性能分析

要求能够迅速简洁的使用录音软件,到达使用方便,检验简单的程度,无论何时何地都可以自由应用。

3.2 界面设计

根据软件程序的需求分析,这个应用程序应该要包含两个主要的用户界面,在这里,就是更进一步的来分析在这两个的用户界面里面,每一个用户界面需要包括哪一些的内容,应该怎么样的来添加使用。

在录音界面中,在录音的过程中程序需要提示用户此次录音文件的保存地址和文件的保存文件名,以方便用户寻找和使用关于此次录音的播放文件。在进入录音界面之后,可以点击实现录音的效果,在录音界面的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 线程就将被恢复。

表3-1更加详细的列出了Activity生命周期中各个方法的详细描述以及系统在调用相应方法后能否杀死对应的Activity。

表3-1 Activity 生命周期描述

Killable after:明确指出系统是否可以在任何上述方法中执行完并返回后杀死持有当前Activity的进程。onPause,onStop,onDestory这里的三个方法被标注为YES,由于onPause方法是Activity创建后最有可能保证执行的方法,因此,当系统遇到紧急情况需要恢复内存,那么onStop,onDestory可能不被执行,因此你应当在onPause里保存一些至关重要的状态属性。

当一个Activity启动转换到另一个Activity的时候,它们都会经历它们生命周期的转变。当另一个

Activity被创建,那么第一个Activity将暂停和停止。Activity生命周期回调方法的调用顺序在上述文档中已经做了很好的定义。

3.4 MediaRecorder的常用方法介绍

MediaRecorder包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。

MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

然后下面就描述一些经常需要用到的方法以及其解释:

方法:setAudioEncoder (int audio_encoder);

解释:设置刻录的音频编码,其值可以通过MediaRecoder内部类的MediaRecorder.AudioEncoder的几个常量:AAC、AMR_NB、AMR_WB、DEFAULT。

方法:setAudioSource (int audio_source);

解释:设置音频的来源,其值可以通过MediaRecoder内部类的MediaRecorder.AudioSource的几个常量来设置,通常设置的值MIC:来源于麦克风。

方法:setOutputFormat (int output_format);

解释:设置输出文件的格式,其值可以通过MediaRecoder内部类MediaRecorder.OutputFormat的一些常量字段来设置。比如一些3gp(THREE_GPP)、mp4(MPEG4)等等。

方法:setOutputFile(String path);

解释:设置输出文件的路径。

方法:setVideoEncoder(int video_encoder);

解释:设置视频的编码格式。其值可以通过MediaRecoder内部类的MediaRecorder.VideoEncoder的几个常量:H263、H264、MPEG_4_SP。

方法:setVideoEncodingBitRate(int bitRate);

解释:设置编码的比特率。

方法:public void start();

解释:开始刻录。

方法:public void prepare();

解释:预期做准备。

方法:public void stop();

解释:停止。

方法:public void release();

解释:释放该对象资源。

3.5 MediaPlayer的常用方法介绍

MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。

MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

实例化一个MediaPlayer无需传入参数

然后下面就描述一些经常需要用到的方法以及其解释:

方法:setAudioStreamType (String path);

解释:无返回值,设置多媒体数据来源(根据路径)。

方法:setAudioStreamType (int streamtype);

解释:无返回值,通过传入音频流的类型来设置媒体播放器相应的播放类型。

注:音频流类型有:

STREAM_VOICE_CALL(通话)

STREAM_SYSTEM(系统声音)

STREAM_RING(铃声)

STREAM_MUSIC(音乐)

STREAM_ALARM(闹铃声)

方法:prepare();

解释:准备启用播放器进行播放。

方法:getDuration();

解释:返回文件已播放时间(long)。

方法:isPlaying();

解释:返回boolean,是否正在播放。

方法:pause();

解释:无返回值,暂停。

方法:start();

解释:无返回值,开始播放。

方法:stop();

解释:无返回值,停止播放。

方法:seekTo(int msec);

解释:无返回值,设置指定时间的位置。

3.5 程序模块设计

从功能需求上分析可以看出,整个应用程序应划分为几个模块,分别为程序启动后的录音界面,录音后的播放界面。

在整个的大体结构上来说,程序的播放是整个程序的中转界面,因为在跳转和打开应用的时候都是要显示自定义播放的界面。播放器在打开前就已经开始进行了SD卡内指定根目录下相应的mp3文件进行相应的搜索。而处在后台的搜索服务就进行工作。

录音界面时进入主界面的默认界面,用户点击开始即可进行相应的录音操作,录音结束后,用户可以选择播放、放弃、保存。

播放界面是有录音界面中的Activity跳入的,在后台时是一直保持关闭状态的,只有在进入播放界面后才可以对相应的录音文件进行基本播放操作。

在完成了用户的界面设计和录音界面之后,整个程序的设计阶段也就到此基本完成了。

4程序开发

4.1 Activity分类

4.1.1 用户界面

图4-1 用户界面

主界面布局代码

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/594326475.html,yout.main); // 注意顺序

Log.v("service", "startactivityoncreate");

setVolumeControlStream(AudioManager.STREAM_MUSIC);

mTabHost = getTabHost();

/* 为TabHost添加标签*/

mTabHost.addTab(mTabHost

.newTabSpec("tab_test1")

.setIndicator("录音", getResources().getDrawable(R.drawable.tab0))

.setContent(new Intent(this, RecordActivity.class)));

mTabHost.addTab(mTabHost

.newTabSpec("tab_test2")

.setIndicator("录音记录",

getResources().getDrawable(R.drawable.tab1))

.setContent(

new Intent(this, NotesActivity.class)

.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));// .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP )

mTabHost.addTab(mTabHost

.newTabSpec("tab_test4")

.setIndicator("关于", getResources().getDrawable(R.drawable.tab2))

.setContent(new Intent(this, AboutActivity.class)));

final TabWidget tabWidget = mTabHost.getTabWidget();

int height = 85;

for (int i = 0; i < tabWidget.getChildCount(); i++) {

// 设置tab高度

tabWidget.getChildAt(i).getLayoutParams().height = height;

// 设置tab中标题文字的颜色,不然默认为黑色

final TextView tv = (TextView) tabWidget.getChildAt(i)

.findViewById(android.R.id.title);

tv.setTextColor(this.getResources().getColorStateList(

android.R.color.black));

// 设置tab布局

tabWidget.getChildAt(i).setBackgroundDrawable(

getResources().getDrawable(R.drawable.tab_indicator));

}

}

android:id="@android:id/tabhost"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/white" >

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@android:id/tabs"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

android:id="@android:id/tabcontent"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal|bottom"

android:text="毕业设计专用"

android:textSize="20sp"

android:layout_marginBottom="10dp" />

4.1.2 语音的录入

图4-2 语音录入界面

public void onStart(Intent intent, int startId) {

// 开始

Log.v("service", "recordServiceonstart");

Bundle bundle = intent.getExtras();

String myRecAudioFileAbsolute = bundle

.getString("myRecAudioFile.getAbsolutePath()");

Log.v("service", myRecAudioFileAbsolute);

// 录音开始

mMeadiaRecorder = new MediaRecorder();

// 设置录音来源、编码格式、输入格式、输出路径

mMeadiaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mMeadiaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

mMeadiaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

mMeadiaRecorder.setOutputFile(myRecAudioFileAbsolute);

try {

mMeadiaRecorder.prepare();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mMeadiaRecorder.start();

}

@Override

public void onDestroy() {

// 结束

Log.v("service", "recorderviceondestroy");

mMeadiaRecorder.stop();

mMeadiaRecorder.release();

mMeadiaRecorder = null;

}

android:layout_width="fill_parent" android:layout_height="fill_parent"

xmlns:android="https://www.360docs.net/doc/594326475.html,/apk/res/android">

android:layout_width="wrap_content"android:layout_height="wrap_content"

android:layout_x="40px" android:layout_y="10px">

相关主题
相关文档
最新文档