1、软件工程毕业设计手机通话录音系统河北农业大学 本科毕业论文(设计) 题 目: 手机通话录音系统 摘要 现在移动设备呈几何形增加,移动设备的演化增加了各种移动设备的应用程序开发,这些移动设备可以成为承载WEB服务的客户端,移动的硬件和软件平台形式允许更快和更丰富的应用程序的运行。本文所介绍的通话录音系统趋于国际化也被越来越多的人接受 ,自2000年以来,全国手机基本上普遍都具有通话录音功能,可将短暂通话记录下来,一般作为法庭重要政务和不可轻视的证据,也可适当看做娱乐。手机录音直接就可以保存在手机SD卡上,需要的时候可以直接调出来,很方便。因为目前手机市场已经出现了明显的Android一家独大趋势
2、,所以本系统选择了Android平台进行开发。本论文首先给出了课题的研究背景,对Android平台做了简单的介绍,通过介绍,可以让读者了解其平台的基本框架以及基本的平台开发技术,在此基础上分析了手机通话录音系统Android客户端程序的基本架构以及各个模块的解决方案,实现通话录音的打开、关闭、播放、删除、保存、选择格式等功能。关键字:移动设备、通话录音系统、AndroidAbstract Now the mobile device is geometric increase, evolution of mobile devices increase the application develo
3、pment of various mobile devices, these devices can be hosting the WEB service client, allowing faster and more extensive application of mobile hardware and software platform running .Call recording system described in this article to be internationalization is accepted by more and more people, since
4、 2000, the national mobile phone basically universal has call recording function, can be recorded as a short talk, the General Court Affairs and important evidence, can also be appropriate as entertainment. Mobile phone recording directly can be kept in the mobile phone SD card, when necessary, can
5、be directly transferred out, very convenient. Because the mobile phone market has appeared obvious Android alone big trend, so the system selected Android development platform. This paper first presents the research background of the subject, the Android platform is introduced, through the introduct
6、ion, so that readers can understand the basic framework of the platform as well as the basic platform development technology, based on the analysis of the basic architecture of mobile phone call recording system Android client program and each module of the solution, realizing call recording open, c
7、lose, delete, save, play, choose Format etc. Keywords: mobile equipment, call recording system, Android 目 录1.绪论 11.1研究背景 11.2研究概况与发展趋势 12.需求分析 12.1可行性分析 12.1.1操作可行性 12.1.2技术可行性 12.1.3经济可行性 22.2功能需求分析 22.2.1基本功能需求 22.2.2用户界面需求 23.开发环境和开发技术 23.1Android平台介绍 23.2Android基本框架介绍 33.3开发环境的选择 44.Android手机客户端
8、具体功能分析 44.1主界面 44.2录音文件的保存 44.3开机自启动的设置 94.4录音文件的管理 94.5功能的开启和关闭 104.6录音文件格式的选择 115.关键程序设计 116总结 12致谢 12附图 13参考文献 141.绪论1.1研究背景 在日常生活或其它方方面面,都经常会遇到这样的问题,交流双方或者对接双方在通过电话沟通交流的时候,由于无法做到面面,所以所说的话,经常会发生歧义造成双方发生误解,尤其是在企业管理中,一般要记录下电话中的重要信息,传统的通话资料大部分都是在通话结束后,通话者再回忆一遍通话的内容,然后慢慢的记录下来,这种方式古老而落后,通话录音软件的出现,真正改变
9、了这种模式。这样的资料保存方式,详细全面而准确,没有半点耽误,非常的方便。而且它也是作为法庭重要政务和不可轻视的证据,也会被人们适当看做娱乐。1.2研究概况与发展趋势 通话录音软件最主要的作用是,把通话信息固化,形成数字化资料保存在手机内存里,是个人记录重要通话信息的便捷手段,也可以作为娱乐使用。随着通信和互联网技术的发展,当前通话录音软件的功能又有了新的发展。除了iphone不能实现通话录音软件的开发外,大部分手机系统都具有相应的通话录音软件,可实现双向通话录音,录音时间不再受时间限制。 如今,手机通话录音软件是智能手机发展起来后的新宠,是移动互联网技术的新型应用。尤其是录音文件被列入证据范
10、畴以后,通话录音成为非常广泛的需求。近来,在云存储技术发展的促进之下,出现了一些与存证、公证相结合的新型通话录音软件,比如语音实录通话录音软件、存证宝等 ,语音实录通话录音软件是其中最以技术见长的针对安卓手机开发的软件,在所有安卓通话录音软件中内录功能最强,已经可以支持四十款左右的安卓手机实现内录,双向通话录音属于高清标准。 随着这方面需求的不断增大,我们要不断注入新的功能,所以,软件通话录音系统必须保持进步与完善。2.需求分析2.1可行性分析2.1.1操作可行性 本系统操作简单,易于理解,只需通过简单指导,上手较快。尊重用户习惯,不改变常规电话接听模式,方便易用,可随时通话录音。 2.1.2
11、技术可行性Android平台是一个开放式的平台,国内开发人员众多,网上相关资料丰富,同时在网上或书店都能买到各类有关Android平台技术开发的图书,因此Android手机客户端的开发在技术方面已不是问题。2.1.3经济可行性该项目相比而言总体规模不大,开发周期比较短,且投入成本较少,并且目前Android手机越来越普遍,客户端成本非常低廉,易于管理和维护。因此在成本上不是问题。2.2功能需求分析2.2.1基本功能需求表2-2-1 功能描述实现的功能 功能描述保存能够保存用户的通话,将录音文件保存到sd卡下.开机自启动用户可以选择是否开机自启动,避免每次开机都得手动开启此软件,给用户带来良好的
12、体验。录音文件的管理本系统实现了一个类似文件游览器的界面,并且用户可以在此界面进行播放,删除等简单操作,方便用户进行管理这些音频文件。录音功能的打开关闭用户可以进行自行选择电话录音功能的开启和关闭,当用户点击开启时,系统将会对电话状态进行监听,如果来电话,从而进行录音,达到电话录音的目的。录音文件格式的选择用户可以选择录音文件的音频格式,目前只支持3gp和amr两种主流音频文件的录制,给用户一个选择,以降低可能因音频文件格式而不能播放造成的BUG。2.2.2用户界面需求(见附图)3.开发环境和开发技术3.1 Android平台介绍 无论对于生产Android软件,还是硬件的企业来说,它都是免费
13、的 3。对于软件厂商来说,加入Google的Android联盟之后就可以对Android系统进行更改,从而在Android框架下打造出自己的操作系统,我国就有联想、华为、中兴、播思通讯等企业加入了Android联盟,并且打造出乐phone,Ophone等一系列就有自主知识产权的手机操作系统,目前国家工信部和移动在大力推广这些手机操作系统。相对于苹果公司、微软公司的“闭关锁国”政策,Android的策略是正好相反的,那就是Open,完全开放,无论是系统内使用的框架,OpenGL、OpenCore等都是开源组织在维护,还是Android系统本身的源代码都是完全开放的,任何人都可以使用Google公
14、司的GIT账号去内部的服务器上去直接下载源码。这些举措得到了很多组织和个人的支持。对于硬件厂商来说,在自己的硬件产品上安装Android操作系统只需要遵循Google的规范,是不需要额外像其支付任何费用的,相信在不久的将来Android系统将会被大量的手机、平板电脑,电视机顶盒,学习机等移动终端上面所使用,市场份额将会非常大,甚至有可能会做到中低端市场的“一统江湖”局面。对于Android开发者来说,学习这个系统的开发是非常容易上手的,它的开发主要由Java语言为主,并且Google提供了基于Eclipse 的开发环境(IDE),免费、跨平台(Windows、Mac OS X、Linux) 的
15、开发工具(SDK),能够非常方便的进行配置,基于众多的Java程序员,想必Android程序员的基数也会非常的大,无疑这也会推动Android的进一步发展。3.2Android基本框架介绍图3-2 Android基本框架从图中可以看出,Android系统架构为四层结构,从上层到下层依次是应用程序层、应用程序框架层、系统运行库层以及Linux内核层。应用程序层,我们在eclipse里面利用SDK开发出来的程序就运行在这一层中,的这些应用程序都是用Java语言编写的,并且这些应用程序的被安装和卸载,就连Android系统自带的应用程序,我们也可以将他们替换,只需将程序放到Android对应linu
16、x系统的system/app路径下,就可以轻松替换系统原生的应用,但这个操作需要ROOT权限,普通用户权限不能完成这个操作。应用程序框架层,这一层是普通Android开发的基础,我们在应用程序框架层调用的函数大多来源于这一层,这一层主要包括ActivityManager、WindowManager、ContentProvider等类,这些都是与系统息息相关的类,系统控制Activity、界面的显示、消息的提醒等就是调用这一层的程序。系统运行库层从图中可以看出,这一层也可以叫做CC+层,因为这一层的代码都是由C和C+语言进行编写的,然后应用层和框架层可以通过JNI的方式来进行调用这一层的程序。这
17、一层主要是SQLITE,OPENGL等偏底层的组件。 Linux内核层,最底层就是Android的改编原型Linux,它是基于Linux2.6内核,系统与硬件的驱动等都依赖于Linux内核。就是以上四层构成了Android系统,这四层相互紧密联系,又相对独立,便于系统的维护以及新功能的增加。3.3开发环境的选择 开发与运行的环境的选择会影响到数据库设计,本系统开发与运行环境如下:此次研究使用eclipse作为开发工具,使用java开发环境JDK和android开发环境AndroidSDK,使用JAVA语言进行程序的开发。4. Android手机客户端具体功能分析4.1主界面此程序的主界面使用了
18、android原生的PreferenceActivity,与android自带程序Setting的风格保持一直。从名字应该可以看出 其实 Activity 与 Perference 的混合物,因为只是存储用户的一些简单配置文件值,而SharedPreferences正好可以满足Preference的键值对存储。所以用户配置界面PreferenceActivity,就是使用SharedPreferneces以键值对的形式进行保存用户配置文件的,当然,既然是使用SharedPreferences保存数据,所有的一切关于SharedPreferences的性质我们都可以用得到,比如配置更改存储、数据
19、变化监听等,PreferenceActivity的Preference在这里就是指的是SharedPreferences,而PreferenceActivity的Activity则是指其又可以像Activity一样展示出来。总言之,PreferenceActivity就是能够使用SharedPreferneces保存的数据的Activity。这种布局方式正好符合这种录音小程序对用户操作进行记录和保存。用法也非常简单,只需要在XML文件里面定义好你所需要的checkbox,button等组键,定义时可以加上Intent属性。它会自动监听用户的动作,用来执行跳转页面等操作。当然在主程序的onCre
20、ate时要执行this.addPreferencesFromResource(R.xml.mainpreference)此函数,用来将界面布局和程序结合在一起。 此程序里面主要涉及到了录音列表,录音类型,开启电话录音功能开关,开机自动启动的的布局。4.2录音文件的保存 实现保存录音的功能,主要用到了Android的MediaRecorder,MediaRecorder具有复杂的生命周期,可以用来录制音频或视频。它具有以下几个状态: Initial:初始状态,在设定视频源或者音频源之后将转换为Initialized状态。 Initialized:已初始化状态,可以通过设置输出格式转换为DataS
21、ourceConfigured状态,或者通过重新启动转换成Initial状态。 DataSourceConfigured:数据源配置状态,这期间可以设定编码方式、输出文件、屏幕旋转、预览显示等等。它仍然可以通过从新启动回到Initial状态,或者通过就绪到达Prepared状态。 Prepared:就绪状态,在就绪状态仍然可以通过重新启动方法回到Initialized状态。或者通过start方法进入录制状态。 Recording:录制状态,真正在录音的那个状态,前边做的一切都是铺垫,它可以通过停止或者重新启动回到Initial状态。 Released:释放状态(官方文档给出的词叫做Idle s
22、tate空闲状态,而官方的图却不这么写),Initial状态可以通过调用释放方法来进入这个状态,这时将会释放所有和MediaRecorder对象绑定的资源。 Error:错误状态,当错误发生的时候进入这个状态,它可以通过从新启动进入Initial状态。下图为MediaRecorder从初始化到结束的整个流程图:图4-2 MediaRecorder流程图但是如果直接使用的话发现跟我们的主要功能不是很匹配,为了方便使用,最好是将其进行封装,本程序中就将MediaRecorder封装成了PhoneRecorder类,下面列出主要的方法: public File getFile() File base
23、 = null; String root = Environment.getExternalStorageDirectory().getPath(); /创建文件夹 base = new File(root + DEFAULT_STORE_SUBDIR); if (!base.isDirectory() & !base.mkdir() Log.e(TAG, getFile-Cant create base dir.); return null; /设置文件名格式 SimpleDateFormat sdf = new SimpleDateFormat(phone-yyyyMMddHHmmss-
24、+ PhoneReceiver.mNumber); String fn = sdf.format(new Date(); fn = base.getPath() + File.separator + fn + DEFAULT_RECORD_SUFFIX; Log.d(TAG, getFile is filepath is + fn); /检验空间是否足够大 StatFs stat = null; stat = new StatFs(base.getPath(); long available_size = (long)stat.getAvailableBlocks() -4) * stat.g
25、etBlockSize(); if (available_size MINIMUM_FREE_SIZE) Log.e(TAG, getFile-not enough free space.); return null; /建立文件 File outFile = new File(fn); try if (outFile.exists() outFile.delete(); boolean bRect = outFile.createNewFile(); if (!bRect) Log.e(TAG, getRecordFile, fn: + fn); catch (Exception e) e.
26、printStackTrace(); return null; Log.d(TAG, getFile sucess.); return outFile; 此函数是用来创建一个空文件来供存储录音的音频。 public boolean startRecord(int OutputFormate, String extension, Context context) Log.d(TAG, satrtReocrd.); if (mState != IDLE_STATE) Log.d(TAG, startRecord error mState != IDLE_STATE); return false;
27、stopRecord(); mFile = getFile(); if (mFile = null) Log.d(TAG, startRecord error mFile = null); return false; /初始化mediaRecorder /TODO set这些值的顺序能否变化? mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); mRecorder.setOutputFormat(OutputFormate); mRecorder.set
28、AudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setOutputFile(mFile.getAbsolutePath(); /mediaRecorder prepare, 一定要handle住 IOException try mRecorder.prepare(); catch (IOException e) mRecorder.reset(); mRecorder.release(); mRecorder = null; e.printStackTrace(); return false; /开始录音 try mReco
29、rder.start(); catch (RuntimeException e) mRecorder.reset(); mRecorder.release(); mRecorder = null; e.printStackTrace(); return false; /将状态设置为录音状态 setState(RECORDING_STATE); Log.d(TAG, satrtReocrd. success); return true; 此函数是封装的开始录音函数,将MediaRecorder复杂的init,prepare等初始化过程封装在了一个函数中,方便业务逻辑调用。public void
30、stopRecord() Log.d(TAG, stopRecord. ); if(mRecorder = null) Log.d(TAG, Stop Recording error.mRecord = null); return; /暂停录音 try mRecorder.stop(); catch (RuntimeException e) Log.d(TAG, Stop Recording error.RuntimeException); mRecorder.reset(); e.printStackTrace(); mRecorder.release(); mRecorder = null; setState(IDLE_STATE); /将数据插入数据库 if (mFile.getPath() != null) ContentResolver cr = mContext.getContentResolver(); ContentValues values = new ContentValues(); values.put(MediaStore.Audio.Media.DATA, mFile.getPath(); String title = mFile
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1