




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
摘要現(xiàn)在移動設(shè)備呈幾何形增加,移動設(shè)備的演化增加了各種移動設(shè)備的應(yīng)用程序開發(fā),這些移動設(shè)備可以成為承載WEB服務(wù)的客戶端,移動的硬件和軟件平臺形式允許更快和更豐富的應(yīng)用程序的運行。本文所介紹的通話錄音系統(tǒng)趨于國際化也被越來越多的人接受,自2000年以來,全國手機基本上普遍都具有通話錄音功能,可將短暫通話記錄下來,一般作為法庭重要政務(wù)和不可輕視的證據(jù),也可適當看做娛樂。手機錄音直接就可以保存在手機SD卡上,需要的時候可以直接調(diào)出來,很方便。因為目前手機市場已經(jīng)出現(xiàn)了明顯的Android一家獨大趨勢,所以本系統(tǒng)選擇了Android平臺進行開發(fā)。本論文首先給出了課題的研究背景,對Android平臺做了簡單的介紹,通過介紹,可以讓讀者了解其平臺的基本框架以及基本的平臺開發(fā)技術(shù),在此基礎(chǔ)上分析了手機通話錄音系統(tǒng)Android客戶端程序的基本架構(gòu)以及各個模塊的解決方案,實現(xiàn)通話錄音的打開、關(guān)閉、播放、刪除、保存、選擇格式等功能。關(guān)鍵字:移動設(shè)備、通話錄音系統(tǒng)、AndroidAbstractNowthemobiledeviceisgeometricincrease,evolutionofmobiledevicesincreasetheapplicationdevelopmentofvariousmobiledevices,thesedevicescanbehostingtheWEBserviceclient,allowingfasterandmoreextensiveapplicationofmobilehardwareandsoftwareplatformrunning.Callrecordingsystemdescribedinthisarticletobeinternationalizationisacceptedbymoreandmorepeople,since2000,thenationalmobilephonebasicallyuniversalhascallrecordingfunction,canberecordedasashorttalk,theGeneralCourtAffairsandimportantevidence,canalsobeappropriateasentertainment.MobilephonerecordingdirectlycanbekeptinthemobilephoneSDcard,whennecessary,canbedirectlytransferredout,veryconvenient.BecausethemobilephonemarkethasappearedobviousAndroidalonebigtrend,sothesystemselectedAndroiddevelopmentplatform.Thispaperfirstpresentstheresearchbackgroundofthesubject,theAndroidplatformisintroduced,throughtheintroduction,sothatreaderscanunderstandthebasicframeworkoftheplatformaswellasthebasicplatformdevelopmenttechnology,basedontheanalysisofthebasicarchitectureofmobilephonecallrecordingsystemAndroidclientprogramandeachmoduleofthesolution,realizingcallrecordingopen,close,delete,save,play,chooseFormatetc..Keywords:mobileequipment,callrecordingsystem,Android 目錄TOC\o"1-3"\h\u1.緒論 11.1研究背景 11.2研究概況與發(fā)展趨勢 12.需求分析 12.1可行性分析 12.1.1操作可行性 12.1.2技術(shù)可行性 12.1.3經(jīng)濟可行性 22.2功能需求分析 22.2.1基本功能需求 22.2.2用戶界面需求 23.開發(fā)環(huán)境和開發(fā)技術(shù) 23.1Android平臺介紹 23.2Android基本框架介紹 33.3開發(fā)環(huán)境的選擇 44.Android手機客戶端具體功能分析 44.1主界面 44.2錄音文件的保存 44.3開機自啟動的設(shè)置 94.4錄音文件的管理 94.5功能的開啟和關(guān)閉 104.6錄音文件格式的選擇 115.關(guān)鍵程序設(shè)計 116總結(jié) 12致謝 12附圖 13參考文獻 141.緒論1.1研究背景在日常生活或其它方方面面,都經(jīng)常會遇到這樣的問題,交流雙方或者對接雙方在通過電話溝通交流的時候,由于無法做到面面,所以所說的話,經(jīng)常會發(fā)生歧義造成雙方發(fā)生誤解,尤其是在企業(yè)管理中,一般要記錄下電話中的重要信息,傳統(tǒng)的通話資料大部分都是在通話結(jié)束后,通話者再回憶一遍通話的內(nèi)容,然后慢慢的記錄下來,這種方式古老而落后,通話錄音軟件的出現(xiàn),真正改變了這種模式。這樣的資料保存方式,詳細全面而準確,沒有半點耽誤,非常的方便。
而且它也是作為法庭重要政務(wù)和不可輕視的證據(jù),也會被人們適當看做娛樂。1.2研究概況與發(fā)展趨勢通話錄音軟件最主要的作用是,把通話信息固化,形成數(shù)字化資料保存在手機內(nèi)存里,是個人記錄重要通話信息的便捷手段,也可以作為娛樂使用。隨著通信和互聯(lián)網(wǎng)技術(shù)的發(fā)展,當前通話錄音軟件的功能又有了新的發(fā)展。除了iphone不能實現(xiàn)通話錄音軟件的開發(fā)外,大部分手機系統(tǒng)都具有相應(yīng)的通話錄音軟件,可實現(xiàn)雙向通話錄音,錄音時間不再受時間限制。如今,手機通話錄音軟件是智能手機發(fā)展起來后的新寵,是移動互聯(lián)網(wǎng)技術(shù)的新型應(yīng)用。尤其是錄音文件被列入證據(jù)范疇以后,通話錄音成為非常廣泛的需求。近來,在云存儲技術(shù)發(fā)展的促進之下,出現(xiàn)了一些與存證、公證相結(jié)合的新型通話錄音軟件,比如語音實錄通話錄音軟件、存證寶等,語音實錄通話錄音軟件是其中最以技術(shù)見長的針對安卓手機開發(fā)的軟件,在所有安卓通話錄音軟件中內(nèi)錄功能最強,已經(jīng)可以支持四十款左右的安卓手機實現(xiàn)內(nèi)錄,雙向通話錄音屬于高清標準。隨著這方面需求的不斷增大,我們要不斷注入新的功能,所以,軟件通話錄音系統(tǒng)必須保持進步與完善。2.需求分析2.1可行性分析2.1.1操作可行性本系統(tǒng)操作簡單,易于理解,只需通過簡單指導,上手較快。尊重用戶習慣,不改變常規(guī)電話接聽模式,方便易用,可隨時通話錄音。2.1.2技術(shù)可行性Android平臺是一個開放式的平臺,國內(nèi)開發(fā)人員眾多,網(wǎng)上相關(guān)資料豐富,同時在網(wǎng)上或書店都能買到各類有關(guān)Android平臺技術(shù)開發(fā)的圖書,因此Android手機客戶端的開發(fā)在技術(shù)方面已不是問題。2.1.3經(jīng)濟可行性該項目相比而言總體規(guī)模不大,開發(fā)周期比較短,且投入成本較少,并且目前Android手機越來越普遍,客戶端成本非常低廉,易于管理和維護。因此在成本上不是問題。2.2功能需求分析2.2.1基本功能需求表2-2-1功能描述實現(xiàn)的功能 功能描述保存能夠保存用戶的通話,將錄音文件保存到sd卡下.開機自啟動用戶可以選擇是否開機自啟動,避免每次開機都得手動開啟此軟件,給用戶帶來良好的體驗。錄音文件的管理本系統(tǒng)實現(xiàn)了一個類似文件游覽器的界面,并且用戶可以在此界面進行播放,刪除等簡單操作,方便用戶進行管理這些音頻文件。錄音功能的打開關(guān)閉用戶可以進行自行選擇電話錄音功能的開啟和關(guān)閉,當用戶點擊開啟時,系統(tǒng)將會對電話狀態(tài)進行監(jiān)聽,如果來電話,從而進行錄音,達到電話錄音的目的。錄音文件格式的選擇用戶可以選擇錄音文件的音頻格式,目前只支持3gp和amr兩種主流音頻文件的錄制,給用戶一個選擇,以降低可能因音頻文件格式而不能播放造成的BUG。2.2.2用戶界面需求(見附圖)3.開發(fā)環(huán)境和開發(fā)技術(shù)3.1Android平臺介紹無論對于生產(chǎn)Android軟件,還是硬件的企業(yè)來說,它都是免費的[3]。對于軟件廠商來說,加入Google的Android聯(lián)盟之后就可以對Android系統(tǒng)進行更改,從而在Android框架下打造出自己的操作系統(tǒng),我國就有聯(lián)想、華為、中興、播思通訊等企業(yè)加入了Android聯(lián)盟,并且打造出樂phone,Ophone等一系列就有自主知識產(chǎn)權(quán)的手機操作系統(tǒng),目前國家工信部和移動在大力推廣這些手機操作系統(tǒng)。相對于蘋果公司、微軟公司的“閉關(guān)鎖國”政策,Android的策略是正好相反的,那就是Open,完全開放,無論是系統(tǒng)內(nèi)使用的框架,OpenGL、OpenCore等都是開源組織在維護,還是Android系統(tǒng)本身的源代碼都是完全開放的,任何人都可以使用Google公司的GIT賬號去內(nèi)部的服務(wù)器上去直接下載源碼。這些舉措得到了很多組織和個人的支持。對于硬件廠商來說,在自己的硬件產(chǎn)品上安裝Android操作系統(tǒng)只需要遵循Google的規(guī)范,是不需要額外像其支付任何費用的,相信在不久的將來Android系統(tǒng)將會被大量的手機、平板電腦,電視機頂盒,學習機等移動終端上面所使用,市場份額將會非常大,甚至有可能會做到中低端市場的“一統(tǒng)江湖”局面。對于Android開發(fā)者來說,學習這個系統(tǒng)的開發(fā)是非常容易上手的,它的開發(fā)主要由Java語言為主,并且Google提供了基于Eclipse的開發(fā)環(huán)境(IDE),免費、跨平臺(Windows、MacOSX、Linux)的開發(fā)工具(SDK),能夠非常方便的進行配置,基于眾多的Java程序員,想必Android程序員的基數(shù)也會非常的大,無疑這也會推動Android的進一步發(fā)展。3.2Android基本框架介紹圖3-2Android基本框架從圖中可以看出,Android系統(tǒng)架構(gòu)為四層結(jié)構(gòu),從上層到下層依次是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層以及Linux內(nèi)核層。應(yīng)用程序?qū)?,我們在eclipse里面利用SDK開發(fā)出來的程序就運行在這一層中,的這些應(yīng)用程序都是用Java語言編寫的,并且這些應(yīng)用程序的被安裝和卸載,就連Android系統(tǒng)自帶的應(yīng)用程序,我們也可以將他們替換,只需將程序放到Android對應(yīng)linux系統(tǒng)的system/app路徑下,就可以輕松替換系統(tǒng)原生的應(yīng)用,但這個操作需要ROOT權(quán)限,普通用戶權(quán)限不能完成這個操作。應(yīng)用程序框架層,這一層是普通Android開發(fā)的基礎(chǔ),我們在應(yīng)用程序框架層調(diào)用的函數(shù)大多來源于這一層,這一層主要包括ActivityManager、WindowManager、ContentProvider等類,這些都是與系統(tǒng)息息相關(guān)的類,系統(tǒng)控制Activity、界面的顯示、消息的提醒等就是調(diào)用這一層的程序。系統(tǒng)運行庫層從圖中可以看出,這一層也可以叫做C\C++層,因為這一層的代碼都是由C和C++語言進行編寫的,然后應(yīng)用層和框架層可以通過JNI的方式來進行調(diào)用這一層的程序。這一層主要是SQLITE,OPENGL等偏底層的組件。Linux內(nèi)核層,最底層就是Android的改編原型Linux,它是基于Linux2.6內(nèi)核,系統(tǒng)與硬件的驅(qū)動等都依賴于Linux內(nèi)核。就是以上四層構(gòu)成了Android系統(tǒng),這四層相互緊密聯(lián)系,又相對獨立,便于系統(tǒng)的維護以及新功能的增加。3.3開發(fā)環(huán)境的選擇開發(fā)與運行的環(huán)境的選擇會影響到數(shù)據(jù)庫設(shè)計,本系統(tǒng)開發(fā)與運行環(huán)境如下:此次研究使用eclipse作為開發(fā)工具,使用java開發(fā)環(huán)境JDK和android開發(fā)環(huán)境AndroidSDK,使用JAVA語言進行程序的開發(fā)。4.Android手機客戶端具體功能分析4.1主界面此程序的主界面使用了android原生的PreferenceActivity,與android自帶程序Setting的風格保持一直。從名字應(yīng)該可以看出其實Activity與Perference的混合物
,因為只是存儲用戶的一些簡單配置文件值,而SharedPreferences正好可以滿足Preference的鍵值對存儲。所以用戶配置界面PreferenceActivity,就是使用SharedPreferneces以鍵值對的形式進行保存用戶配置文件的,當然,既然是使用SharedPreferences保存數(shù)據(jù),所有的一切關(guān)于SharedPreferences的性質(zhì)我們都可以用得到,比如配置更改存儲、數(shù)據(jù)變化監(jiān)聽等,PreferenceActivity的Preference在這里就是指的是SharedPreferences,而PreferenceActivity的Activity則是指其又可以像Activity一樣展示出來。總言之,PreferenceActivity就是能夠使用SharedPreferneces保存的數(shù)據(jù)的Activity。這種布局方式正好符合這種錄音小程序?qū)τ脩舨僮鬟M行記錄和保存。用法也非常簡單,只需要在XML文件里面定義好你所需要的checkbox,button等組鍵,定義時可以加上Intent屬性。它會自動監(jiān)聽用戶的動作,用來執(zhí)行跳轉(zhuǎn)頁面等操作。當然在主程序的onCreate時要執(zhí)行this.addPreferencesFromResource(R.xml.mainpreference)此函數(shù),用來將界面布局和程序結(jié)合在一起。此程序里面主要涉及到了錄音列表,錄音類型,開啟電話錄音功能開關(guān),開機自動啟動的的布局。4.2錄音文件的保存實現(xiàn)保存錄音的功能,主要用到了Android的MediaRecorder,MediaRecorder具有復雜的生命周期,可以用來錄制音頻或視頻。它具有以下幾個狀態(tài):Initial
:初始狀態(tài),在設(shè)定視頻源或者音頻源之后將轉(zhuǎn)換為Initialized
狀態(tài)。Initialized
:已初始化狀態(tài),可以通過設(shè)置輸出格式轉(zhuǎn)換為DataSourceConfigured
狀態(tài),或者通過重新啟動轉(zhuǎn)換成Initial
狀態(tài)。DataSourceConfigured
:數(shù)據(jù)源配置狀態(tài),這期間可以設(shè)定編碼方式、輸出文件、屏幕旋轉(zhuǎn)、預(yù)覽顯示等等。它仍然可以通過從新啟動回到Initial
狀態(tài),或者通過就緒到達Prepared
狀態(tài)。Prepared
:就緒狀態(tài),在就緒狀態(tài)仍然可以通過重新啟動方法回到Initialized
狀態(tài)?;蛘咄ㄟ^start
方法進入錄制狀態(tài)。Recording
:錄制狀態(tài),真正在錄音的那個狀態(tài),前邊做的一切都是鋪墊,它可以通過停止或者重新啟動回到Initial
狀態(tài)。Released
:釋放狀態(tài)(官方文檔給出的詞叫做
Idlestate
空閑狀態(tài),而官方的圖卻不這么寫),Initial
狀態(tài)可以通過調(diào)用釋放方法來進入這個狀態(tài),這時將會釋放所有和MediaRecorder
對象綁定的資源。Error
:錯誤狀態(tài),當錯誤發(fā)生的時候進入這個狀態(tài),它可以通過從新啟動進入Initial
狀態(tài)。下圖為MediaRecorder從初始化到結(jié)束的整個流程圖:圖4-2MediaRecorder流程圖但是如果直接使用的話發(fā)現(xiàn)跟我們的主要功能不是很匹配,為了方便使用,最好是將其進行封裝,本程序中就將MediaRecorder封裝成了PhoneRecorder類,下面列出主要的方法: publicFilegetFile(){ Filebase=null; Stringroot=Environment.getExternalStorageDirectory().getPath(); //創(chuàng)建文件夾 base=newFile(root+DEFAULT_STORE_SUBDIR); if(!base.isDirectory()&&!base.mkdir()){ Log.e(TAG,"getFile--Can'tcreatebasedir."); returnnull; } //設(shè)置文件名格式 SimpleDateFormatsdf=newSimpleDateFormat("'phone'-yyyyMMddHHmmss-"+PhoneReceiver.mNumber); Stringfn=sdf.format(newDate()); fn=base.getPath()+File.separator+fn+DEFAULT_RECORD_SUFFIX; Log.d(TAG,"getFileisfilepathis"+fn); //檢驗空間是否足夠大 StatFsstat=null; stat=newStatFs(base.getPath()); longavailable_size=((long)stat.getAvailableBlocks()-4)*stat.getBlockSize(); if(available_size<MINIMUM_FREE_SIZE){ Log.e(TAG,"getFile--notenoughfreespace."); returnnull; } //建立文件 FileoutFile=newFile(fn); try{ if(outFile.exists()){ outFile.delete(); } booleanbRect=outFile.createNewFile(); if(!bRect){ Log.e(TAG,"getRecordFile,fn:"+fn); } }catch(Exceptione){ e.printStackTrace(); returnnull; } Log.d(TAG,"getFilesucess.."); returnoutFile; }此函數(shù)是用來創(chuàng)建一個空文件來供存儲錄音的音頻。 publicbooleanstartRecord(intOutputFormate,Stringextension,Contextcontext){ Log.d(TAG,"satrtReocrd..."); if(mState!=IDLE_STATE){ Log.d(TAG,"startRecorderrormState!=IDLE_STATE"); returnfalse; } stopRecord(); mFile=getFile(); if(mFile==null){ Log.d(TAG,"startRecorderrormFile==null"); returnfalse; } //初始化mediaRecorder //TODOset這些值的順序能否變化? mRecorder=newMediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); mRecorder.setOutputFormat(OutputFormate); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setOutputFile(mFile.getAbsolutePath()); //mediaRecorderprepare,一定要handle住IOException try{ mRecorder.prepare(); }catch(IOExceptione){ mRecorder.reset(); mRecorder.release(); mRecorder=null; e.printStackTrace(); returnfalse; } //開始錄音 try{ mRecorder.start(); }catch(RuntimeExceptione){ mRecorder.reset(); mRecorder.release(); mRecorder=null; e.printStackTrace(); returnfalse; } //將狀態(tài)設(shè)置為錄音狀態(tài) setState(RECORDING_STATE); Log.d(TAG,"satrtReocrd...success"); returntrue; }此函數(shù)是封裝的開始錄音函數(shù),將MediaRecorder復雜的init,prepare等初始化過程封裝在了一個函數(shù)中,方便業(yè)務(wù)邏輯調(diào)用。publicvoidstopRecord(){ Log.d(TAG,"stopRecord..."); if(mRecorder==null){ Log.d(TAG,"StopRecordingerrormRecord==null"); return; } //暫停錄音 try{ mRecorder.stop(); }catch(RuntimeExceptione){ Log.d(TAG,"StopRecordingerrorRuntimeException"); mRecorder.reset(); e.printStackTrace(); } mRecorder.release(); mRecorder=null; setState(IDLE_STATE); //將數(shù)據(jù)插入數(shù)據(jù)庫 if(mFile.getPath()!=null){ ContentResolvercr=mContext.getContentResolver(); ContentValuesvalues=newContentValues(); values.put(MediaStore.Audio.Media.DATA,mFile.getPath()); Stringtitle=mFile.getName(); if(title.contains(DEFAULT_RECORD_SUFFIX)){ Log.d(TAG,"title.contains(DEFAULT_RECORD_SUFFIX)"); title=title.replace(DEFAULT_RECORD_SUFFIX,""); } Log.d(TAG,"titleis"+title); values.put(MediaStore.Audio.Media.TITLE,title); values.put(MediaStore.Audio.Media.MIME_TYPE,"audio/mp4"); Uriuri=cr.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values); Log.d(TAG,"uriis"+uri); Intentintent_scanFile=newIntent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri); mContext.sendBroadcast(intent_scanFile); Log.d(TAG,"sendBroadcast"); } Log.d(TAG,"stopRecord...success"); }此函數(shù)是將暫停錄音,保存錄音文件、插入數(shù)據(jù)庫、發(fā)送廣播來掃描錄制的此文件封裝到了一起。在主線程中只需調(diào)用這三個函數(shù)即可完成錄音文件的創(chuàng)建和保存,大大優(yōu)化了效率,以及代碼的復用性。4.3開機自啟動的設(shè)置Android
系統(tǒng)啟動的時候,首先會進行一些諸如硬件自檢之類的操作,這些操作完成以后(至少它應(yīng)該知道當前的機器有沒有電),會檢查一下當前手機按鍵的狀態(tài)(接下來
就是所謂刷機模式切換了,不同的android手機有不同的按鍵組合用來進入刷機模式),如果此時按鍵狀態(tài)處于刷機組合,那么系統(tǒng)會調(diào)用ROM里面的一個叫做recovery的程序;如果此時按鍵沒有標明是刷機模式,那么系統(tǒng)會創(chuàng)建內(nèi)存盤,開始從ROM里面載入相應(yīng)的文件系統(tǒng),并把相關(guān)的文件拷貝到內(nèi)存盤中,進而引導
linux啟動,然后是啟動虛擬機dalvik,然后就是創(chuàng)建工作進程載入和運行framework,然后就會看到待機的畫面。當然在這個過程中還發(fā)生了許多事情,啟動了許多服務(wù),我們就利用他啟動Framework層和加載所有應(yīng)用程序之后,發(fā)送BOOT_COMPLETED廣播消息,就好像告訴所有的應(yīng)用程序手機啟動起來了。BroadcastReceiver(廣播接收器)是Android中的四大組件之一。此程序就是利用BroadcastReceiver來接受BOOT_COMPLETED消息,然后就開始監(jiān)聽用戶的電話狀態(tài)。 publicvoidonReceive(Contextcontext,Intentintent){ Log.d(TAG,"action"+intent.getAction()); mContext=context; Log.d(TAG,"flagis"+flag); if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ SharedPreferencesprefs=context.getSharedPreferences("com.android.work_preferences",0); booleanboot_turn_on=prefs.getBoolean("BootTurnOn",false); booleanturn_on=prefs.getBoolean("isTurnOn",false); //開機自啟動關(guān)閉,錄音功能開啟,關(guān)閉錄音 if(!boot_turn_on&&turn_on){ flag=STATE_CLOSE; prefs.edit().putBoolean("isTurnOn",false).commit(); }elseif(boot_turn_on&&turn_on){ flag=STATE_OPEN; }elseif(boot_turn_on&&!turn_on){ flag=STATE_OPEN; prefs.edit().putBoolean("isTurnOn",true).commit(); } }這樣就實現(xiàn)了開機自啟動的功能。4.4錄音文件的管理在此程序中實現(xiàn)了一個簡單的文件管理器,利用ListActivity的布局方式,將已經(jīng)錄下的錄音文件按照時間順序進行排列。該界面里面的數(shù)據(jù)一個像數(shù)組或者是光標一樣,通過綁定數(shù)據(jù)資源來陳列一系列選項的活動。當我們選擇這些選項時,將會觸發(fā)一個事件。ListActivity主持操作著一個列表視圖對象,這個列表視圖能綁定不同的數(shù)據(jù)資源,典型的就是一個持有查詢結(jié)果的數(shù)組或者是光標。ListActivity有一個默認的布局,這個布局由單一的、全屏列表構(gòu)成。我們通過在onCreate()中使用setContentView()設(shè)置自己的視圖布局來定制自己的屏幕布局。如果要完成這些,我們自己的視圖必須包含一個id為“@android:id/list”的ListView對象。如果我們的列表為空時,可以包含另外一個視圖對象,這個空的列表必須有一個"android:empty"值的id,注意到當有一個空的視圖顯示時,這個列表視圖將會在沒有任何數(shù)據(jù)時被隱藏。簡單的說就是首先將數(shù)據(jù)放到一個Adapter中,然后listActivity會自動的將數(shù)據(jù)按照線性進行排列,給用戶一種簡單,嚴謹?shù)捏w驗。在此界面也實現(xiàn)了用戶對錄音文件的簡單管理,如刪除等操作。文件名的選擇是根據(jù)跟你通話人的電話號碼,在通訊錄數(shù)據(jù)庫中自動索引此人名字并且顯示出來,如果索引不到,就會以電話號碼作為此文件的顯示名稱,讓用戶一目了然,非常快速的找到自己想要的錄音文件。4.5功能的開啟和關(guān)閉此功能利用sharedPreference來進行保存開啟和關(guān)閉的狀態(tài)。SharedPreferences是Android平臺上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態(tài),一般在Activity中重載窗口狀態(tài)onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平臺常規(guī)的Long長整形、Int整形、String字符串型的保存。在Android系統(tǒng)中,在主界面有一個checkbox用戶來進行對電話錄音功能的開啟和關(guān)閉。當用戶點擊,程序會監(jiān)聽用戶的點擊事件,從而調(diào)用此函數(shù): publicbooleanonPreferenceChange(Preferencepreference,ObjectnewValue){ Log.d(TAG,"preference.keyis"+preference.getKey()+"newValueis" +newValue.toString()); if(preference.getKey().equals("isTurnOn")){ if(newValue.toString().equals("true")){// PhoneReceiver.setFlag(PhoneReceiver.STATE_OPEN); }elseif(newValue.toString().equals("false")){// PhoneReceiver.setFlag(PhoneReceiver.STATE_CLOSE); Intentintent=newIntent("com.phonereceiver.state.close"); this.sendBroadcast(intent); Log.d(TAG,"sendBroadcastcom.phonereceiver.state.close"); //設(shè)置將連接狀態(tài)置為false SharedPreferencesprefs=this.getSharedPreferences("com.android.phone.record.master_preferences",0); prefs.edit().putBoolean(STRING_CONNECT_STATE,false).commit(); } returntrue; }修改SharedPreferences中的的標志位,來對開啟和關(guān)閉錄音進行操作。4.6錄音文件格式的選擇錄音文件格式的保存實現(xiàn)方法與上面錄音功能開啟和關(guān)閉的方法相同,Mediarecorder初始化時,可以進行MediaRecorder.OutputFormat的設(shè)置,我們程序里面使用了最常見的3gpp和AMR格式,來供用戶進行選擇。當然跟上面相同,通過修改SharedPreferences中的的key-value鍵值對來進行保存,當初始化時,會從SharedPreferences中得到此數(shù)據(jù)。5.關(guān)鍵程序設(shè)計下面進行此程序的關(guān)鍵設(shè)計,就是如何監(jiān)聽電話的呼入和呼出狀態(tài)。開發(fā)應(yīng)用程序的時候,我們希望能夠監(jiān)聽電話的呼入,以便執(zhí)行暫停音樂播放器等操作,當電話結(jié)束之后,再次恢復播放。在Android平臺可以通過TelephonyManager和PhoneStateListener來完成此任務(wù)。TelephonyManager作為一個Service接口提供給用戶查詢電話相關(guān)的內(nèi)容,比如IMEI,LineNumber1。通過下面的代碼即可獲得TelephonyManager的實例。TelephonyManagermTelephonyMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);在Android平臺中,PhoneStateListener是個很有用的監(jiān)聽器,用來監(jiān)聽電話的狀態(tài),比如呼叫狀態(tài)和連接服務(wù)等。其方法如下所示:publicvoidonCallForwardingIndicatorChanged(booleancfi)publicvoidonCallStateChanged(intstate,StringincomingNumber)publicvoidonCellLocationChanged(CellLocationlocation)publicvoidonDataActivity(intdirection)publicvoidonDataConnectionStateChanged(intstate)publicvoidonMessageWaitingIndicatorChanged(booleanmwi)publicvoidonServiceStateChanged(ServiceStateserviceState)publicvoidonSignalStrengthChanged(intasu)這里我們只需要覆蓋onCallStateChanged()方法即可監(jiān)聽呼叫狀態(tài)。在TelephonyManager中定義了三種狀態(tài),分別是振鈴(RINGING),摘機(OFFHOOK)和空閑(IDLE),我們通過state的值就知道現(xiàn)在的電話狀態(tài)了。獲得了TelephonyManager接口之后,調(diào)用listen()方法即可監(jiān)聽電話狀態(tài)。也就是說當用PhoneStateListener來監(jiān)聽用戶的來電和去電狀態(tài),來調(diào)用之前封裝好的startRecord和stopRecord
函數(shù)來進行錄音和停止。具體代碼如下: privatePhoneStateListenerlistener=newPhoneStateListener(){ @Override publicvoidonCallStateChanged(intstate,StringincomingNumber){ //注意,方法必須寫在super方法后面,否則incomingNumber無法獲取到值。 super.onCallStateChanged(state,incomingNumber); switch(state){ caseTelephonyManager.CALL_STATE_IDLE: Log.d(TAG,"掛斷"); if(mRecorder!=null){ mRecorder.stopRecord(); } setToCloseState(); break; caseTelephonyManager.CALL_STATE_OFFHOOK: Log.d(TAG,"接聽"); if(mRecorder!=null&&flag==STATE_CONNECT){ Log.d(TAG,"startRecord"); mRecorder.startRecord(RECORD_OUTPUT_FORMATE,RECORD_TYPE,mContext); } break; caseTelephonyManager.CALL_STATE_RINGING: Log.d(TAG,"響鈴:來電號碼"+incomingNumber); mNumber=incomingNumber; //輸出來電號碼 break; } } };這樣就實現(xiàn)了電話的錄音和保存。6總結(jié)此次畢業(yè)設(shè)計基本完成了一個手機通話錄音系統(tǒng),選擇這個課題一方面是根據(jù)現(xiàn)在人們這方面的需求,另一方面還有市場的需要,它實現(xiàn)的功能主要包括:錄音文件的保存、開機自啟動的設(shè)置、錄音文件的管理、錄音功能的開啟和關(guān)閉、文件格式的選擇。由于時間原因和自己開發(fā)經(jīng)驗不足,系統(tǒng)存在一些不可避免的問題,下一步,我將努力完善該系統(tǒng)。致謝行文至此,我的這篇論文已接近尾聲,本文從選題,軟件設(shè)計,軟件實現(xiàn),形成初稿,以致最終定稿,都得到了老師以及其他同學、學長的幫助。尤其在功能設(shè)計階段,讓我對Android系統(tǒng)有了更深層次的體會,對文檔的各個部分的編寫讓我充分認識到各個部分各有其作用,缺一不可。在這里,再次向那些在系統(tǒng)開發(fā)過程中為我提供幫助的老師和同學表示感謝。附圖圖1主界面圖2錄音列表圖3打開方式圖4類型選擇圖5關(guān)于參考文獻[1]3G繼續(xù)穩(wěn)步快行[J].中國電信業(yè),2007(2):5051[2]陳汗青,呂杰鋒編著.數(shù)碼設(shè)計藝術(shù)[M].人民美術(shù)出版社,2004[3]CodeHome.AndroidAnOpenHandsetAllianceProject[EB/OL].2008.01.01[4]邸爍.Android揭秘和未來發(fā)展趨勢[EB/OL].2008.03.17[5]張超,王阿川,王智.基于J2ME和J2EE的手機軟件的研究[J].黑龍江科技信息,2007(3):21-201[6]劉向輝.基于Java的移動終端中間件的研究與設(shè)計[D].華東師范大學碩士學位論文,2005.[7]高博.基于J2ME的移動通信技術(shù)的研究與應(yīng)用[D].沈陽工業(yè)大學碩士學位論文,2006.基于C8051F單片機直流電動機反饋控制系統(tǒng)的設(shè)計與研究基于單片機的嵌入式Web服務(wù)器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協(xié)議棧的實現(xiàn)基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內(nèi)壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)基于單片機的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機實現(xiàn)一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設(shè)計基于單片機控制的高速快走絲電火花線切割機床短循環(huán)走絲方式研究基于單片機的機電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機的智能手機充電器基于單片機的實時內(nèi)核設(shè)計及其應(yīng)用研究基于單片機的遠程抄表系統(tǒng)的設(shè)計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統(tǒng)單片機系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設(shè)計和應(yīng)用基于單片機的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機單片機控制系統(tǒng)的研制基于單片機的數(shù)字磁通門傳感器基于單片機的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機的多生理信號檢測儀基于單片機的電機運動控制系統(tǒng)設(shè)計Pico專用單片機核的可測性設(shè)計研究基于MCS-51單片機的熱量計基于雙單片機的智能遙測微型氣象站MCS-51單片機構(gòu)建機器人的實踐研究基于單片機的輪軌力檢測基于單片機的GPS定位儀的研究與實現(xiàn)基于單片機的電液伺服控制系統(tǒng)用于單片機系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機的時控和計數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機和CPLD的粗光柵位移測量系統(tǒng)研究單片機控制的后備式方波UPS提升高職學生單片機應(yīng)用能力的探究基于單片機控制的自動低頻減載裝置研究基于單片機控制的水下焊接電源的研究基于單片機的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機的氚表面污染測量儀的研制基于單片機的紅外測油儀的研究96系列單片機仿真器研究與設(shè)計基于單片機的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機的溫度智能控制系統(tǒng)的設(shè)計與實現(xiàn)基于MSP430單片機的電梯門機控制器的研制基于單片機的氣體測漏儀的研究基于三菱M16C/6N系列單片機的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機的膛壁溫度報警系統(tǒng)設(shè)計基于AVR單片機的低壓無功補償控制器的設(shè)計基于單片機船舶電力推進電機監(jiān)測系統(tǒng)基于單片機網(wǎng)絡(luò)的振動信號的采集系統(tǒng)基于單片機的大容量數(shù)據(jù)存儲技術(shù)的應(yīng)用研究基于單片機的疊圖機研究與教學方法實踐基于單片機嵌入式Web服務(wù)器技術(shù)的研究及實現(xiàn)基于AT89S52單片機的通用數(shù)據(jù)采集系統(tǒng)基于單片機的多道脈沖幅度分析儀研究機器人旋轉(zhuǎn)電弧傳感角焊縫跟蹤單片機控制系統(tǒng)基于單片機的控制系統(tǒng)在PLC虛擬教學實驗中的應(yīng)用研究基于單片機系統(tǒng)的網(wǎng)絡(luò)通信研究與應(yīng)用基于PIC16F877單片機的莫爾斯碼自動譯碼系統(tǒng)設(shè)計與研究基于單片機的模糊控制器在工業(yè)電阻爐上的應(yīng)用研究HYPERLINK"/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粒缺患者宣教調(diào)查問卷(護士版)
- 2025年衛(wèi)浴柜行業(yè)投資分析:衛(wèi)浴柜行業(yè)投資前景廣闊
- 2025年互聯(lián)網(wǎng)發(fā)展趨勢:數(shù)字化助力鄉(xiāng)村振興的數(shù)據(jù)洞察
- 山東省棗莊市市中區(qū)2024-2025學年高二上學期期末階段性質(zhì)量監(jiān)測數(shù)學試題(解析版)
- 2025年中考語文名著閱讀考點演練《艾青詩選》:如何讀詩(九年級上) 答案版
- 綠化帶恢復施工方案
- 2025年簡單護理面試題及答案
- 低密度脂蛋白3.62膽固醇6.27脂蛋白499
- cause的用法歸納與總結(jié)
- 4年級上冊第四單元英語人教點讀
- 《祖父的園子》PPT課件【精美版】
- 2023年安徽審計職業(yè)學院單招職業(yè)適應(yīng)性測試題庫及答案解析
- LS/T 3311-2017花生醬
- 蘇教版二年級科學下冊第10課《認識工具》教案(定稿)
- GB/T 40262-2021金屬鍍膜織物金屬層結(jié)合力的測定膠帶法
- GB/T 3279-2009彈簧鋼熱軋鋼板
- GB/T 16823.3-2010緊固件扭矩-夾緊力試驗
- 應(yīng)用文寫作-第四章公務(wù)文書(請示報告)課件
- Premiere-視頻剪輯操作-課件
- 麻醉藥理學阿片類鎮(zhèn)痛藥PPT
- 新湘版小學科學四年級下冊教案(全冊)
評論
0/150
提交評論