2-4 通話+信息功能技術_第1頁
2-4 通話+信息功能技術_第2頁
2-4 通話+信息功能技術_第3頁
2-4 通話+信息功能技術_第4頁
2-4 通話+信息功能技術_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目錄TOC o 1-3 h z u HYPERLINK l _Toc292956344 1基本要求 PAGEREF _Toc292956344 h 1 HYPERLINK l _Toc292956345 2打電話流程 PAGEREF _Toc292956345 h 1 HYPERLINK l _Toc292956346 2.11 OutgoingCallBroadcaster.java PAGEREF _Toc292956346 h 2 HYPERLINK l _Toc292956347 2.22 OutgoingCallReceiver.java PAGEREF _Toc292956347

2、h 2 HYPERLINK l _Toc292956348 2.33 InCallScreen.java負責通話的那一個界面 PAGEREF _Toc292956348 h 2 HYPERLINK l _Toc292956349 ) onCreate(第一次) PAGEREF _Toc292956349 h 2 HYPERLINK l _Toc292956350 ) onNewIntent(非第一次)。 PAGEREF _Toc292956350 h 3 HYPERLINK l _Toc292956351 ) onResume PAGEREF _

3、Toc292956351 h 3 HYPERLINK l _Toc292956352 2.44 Profiler.java該類對通話各個時間點進行記錄。 PAGEREF _Toc292956352 h 3 HYPERLINK l _Toc292956353 2.55 PhoneUtils.java負責Phone對象的生成 PAGEREF _Toc292956353 h 3 HYPERLINK l _Toc292956354 ) placeCall(Phone phone, String number, Uri contactRef) PAGEREF _Toc292956354

4、h 4 HYPERLINK l _Toc292956355 ) placeCallVia(Context context,Phone phone,String number,Uri contactRef,Uri gatewayUri) PAGEREF _Toc292956355 h 4 HYPERLINK l _Toc292956356 2.66 PhoneApp.java負責Phone對象頂層應用的生成 PAGEREF _Toc292956356 h 4 HYPERLINK l _Toc292956357 2.77 CallNotifier.java監聽Phone狀態改變和t

5、elephony層事件,觸發UI行為 PAGEREF _Toc292956357 h 4 HYPERLINK l _Toc292956358 3電話部分 PAGEREF _Toc292956358 h 5 HYPERLINK l _Toc292956359 3.1判斷電話接通狀態 PAGEREF _Toc292956359 h 6 HYPERLINK l _Toc292956360 3.2刪除通話記錄 PAGEREF _Toc292956360 h 6 HYPERLINK l _Toc292956361 4短信部分 PAGEREF _Toc292956361 h 8 HYPERLINK l _

6、Toc292956362 4.1發送短信 PAGEREF _Toc292956362 h 8 HYPERLINK l _Toc292956363 4.2發送彩信 PAGEREF _Toc292956363 h 8 HYPERLINK l _Toc292956364 4.3刪除短信 PAGEREF _Toc292956364 h 8 HYPERLINK l _Toc292956365 4.4監聽短信收發 PAGEREF _Toc292956365 h 10 HYPERLINK l _Toc292956366 4.4.1利用廣播 PAGEREF _Toc292956366 h 10 HYPERLI

7、NK l _Toc292956367 4.4.2利用數據庫 PAGEREF _Toc292956367 h 11 HYPERLINK l _Toc292956368 4.5收到短信不頂欄通知 PAGEREF _Toc292956368 h 12 HYPERLINK l _Toc292956369 4.6獲取短信內容 PAGEREF _Toc292956369 h 12基本要求要求能夠向向指定的號號碼發起呼呼叫;能夠監視呼呼入事件,并并得到呼入入的號碼;嘗試對呼入入事件進行行處理(顯顯示給用戶戶或者直接接拒絕);通話記錄的的獲取以及及刪除;上述技術點點都涉及到到應用程序序安全授權問問題,研究究A

8、ndrroid在在保證應用用程序安全全上采用的的方法。打電話流程程 HYPERLINK /share/detail/30388064 http:/sharre/deetaill/30338806641 OuttgoinngCalllBrooadcaasterr.javva點擊撥號盤盤撥打按鈕鈕后,進入入通話的PPhonee包。此時時首先進入入的函數OOutgooingCCallBBroaddcastter.jjava,該該類是一個個Actiivityy。由actiivityy的生命周周期可知,第第一次進入入時應調用用onCrreatee()函數數。(在該類中中也只實現現了這個函函數。)解析一下

9、下這個函數數:1.1) 首先獲取取Inteent對象象,獲取撥撥出的號碼碼。1.2) 接著判斷斷號碼是否否為緊急號號碼,如果果是緊急號號碼,將ccallNNow變量量賦值為ttrue,啟啟動InCCallSScreeen,并發發送廣播。而在reeceivver里面面判斷caallNoow為turee就直接fiinishh,而不再再重復啟動動InCaallSccreenn;如果不不是緊急號號碼,將ccallNNow變量量賦值為ffalsee,發送廣廣播“Inteent.AACTIOON_NEEW_OUUTGOIING_CCALL”。2 OuttgoinngCalllRecceiveer.jaav

10、a廣播發送后后OutggoinggCalllReceeiverr將會收到到該息。該該類是一個個內部類,在在類OuttgoinngCalllBrooadcaasterr里面,作作用是接收收OutggoinggCalllBroaadcasster發發送的廣播播,判斷是是否已經啟啟動InCCallSScreeen。沒有有啟動的話話就進行一一些初始化化,如:對對OTA進行行初始化。接收到廣廣播之后,從從Inteent里面面取出電話話號碼及其其URi。然然后,設置置Inteent為ACTIION_CCALL,并并帶上號碼碼和urii。啟動InnCalllScreeen。關關閉該Acctiviity。OT

11、A:OOver-the-Air Techhnoloogy空中中下載技術術,是通過過移動通信信(GSMM或CDMAA)的空中中接口對SSIM卡數數據及應用用進行遠程程管理的技技術??罩兄薪涌诳梢砸圆捎肳AAP、GPRSS、CDMAA1X及短短消息技術術。OTAA技術的應應用,使得得移動通信信不僅可以以提供語音音和數據服服務,而且且還能提供供新業務下下載。GSM:GGlobaal Syystemm forr Mobbile Commmuniccatioons,中中文為全球球移動通訊訊系統,俗俗稱全球通。CDMA:Codee Divvisioon Muultipple AAccesss,又稱稱碼分多

12、址址,是在無無線通訊上上使用的技技術,CDDMA允許許所有的使使用者同時時使用全部部頻帶(11.22888Mhzz),并且且把其他使使用者發出出的訊號視視為雜訊,完完全不必考考慮到訊號號碰撞 (colllisioon) 的的問題。CCDMA的的優點包括括:CDMMA中所提提供的語音音編碼技術術,其通話話品質比目目前的GSSM好,而而且可以把把用戶對話話時周圍環環境的噪音音降低,使使通話更為為清晰。3 InCCallSScreeen.jaava負責通話話的那一個個界面該類exttendss了Acittivitty,并且且impllemennts了OnCllickLListeener,OnToou

13、chLListeener和和OnQuueryCComplleteLListeener。該類主要要是負責通通話的那一一個界面,并并且還負責責菜單項各各種按鍵事事件和觸摸摸時間的處處理。同時時本類還復復寫的fiinishh()方法法,所以一一般不會被被finiish掉,調調用這個方方法時它又又把自己放放回棧中。InCaallSccreenn可以接收收這個Inntentt并啟動。3.1) onCrreatee(第一次次)3.1.11) caallSccreennOnCrreatee獲得通話話界面被創創建的時間間。3.1.22) PhhoneAApp喚醒醒后臺的服服務程序。3.1.33) 判斷斷當前的

14、通通話狀態(IDLE =沒有通話行為,RINGING =正在通話或呼叫等待,OFFHOOK = The phone is off hook. At least one call exists that is dialing, active or holding and no calls are ringing or waiting.),如果正在通話,不會出現鍵盤鎖。接著設置mPhone and mForegroundCall/mBackgroundCall/mRingingCall。3.1.44) geetBluuetooothHaandsffree設設置藍牙耳耳機,如果果存在藍牙牙耳機,則則

15、安裝該設設備。3.1.55) innitInnCalllScreeen加載載各種viiew組建建。3.1.66) 對通通話的各種種狀態進行行廣播。(regiisterrForPPreciiseCaallSttateCChangged,regiisterrForDDiscoonnecct,regiisterrForMMmiInnitiaatereegistterFoorMmiiComppletee,regiisterrForCCallWWaitiing,regiisterrForSSuppSServiiceFaailedd,regiisterrForCCdmaOOtaSttatussChanng

16、e)3.1.77) innternnalReesolvveInttent判判斷是否使使用了OTTA技術,通通過該判斷斷設置通話話界面的樣樣式。3.1.88) caallSccreennCreaated記記錄通話界界面創建完完成后的時時間3.2) onNeewInttent(非第一次次)。我們重新啟啟動一個IIntennt時調用用該函數。由于我們們圍繞唯一一的一個IInCalllScrreen實實例來完成成通過的這這個過程,那那么除了第第一次被創創建的InnCalllScreeen,只只要有來電電或者去電電,該程序序就會發生生。如果IInCalllScrreen已已經在前臺臺,該程序序也會發生生

17、。3.2.11) seetInttent保保存該Inntentt,以至于于將來我們們可以獲得得該inttent。3.2.22) innternnalReesolvveInttent3.3) onReesumee進行一些初初始化操作作,如:獲取一一個PhooneAppp對象,解解開Keyyguarrd Nootifiicatiion的stattusBaar給Disaable。還內置了了一個Haandleer可以回回調處理一一些事件,比比如:PHHONE_STATTE_CHHANGEED,PHONNE_DIISCONNNECTT,EVENNT_HEEADSEET_PLLUG_SSTATEE_CHA

18、ANGEDD。同時有有一個獨立立的BrooadcaastReeceivver處理理ACTIION_HHEADSSET_PPLUG,比比如插入耳耳機等。3.3.11) 首先先對鎖屏情情況下的來來電除了處處理。3.3.22) diisablleStaatusBBar當正正在通話界界面時,使使得狀態欄欄可用。3.3.33) seetIgnnoreTTouchhUserrActiivityy忽略通話話過程中無無意的觸碰碰事件,使使得這些無無意的觸碰碰不會阻止止設備進入入休眠。3.3.44) reegistterReeceivver監聽聽廣播3.3.55) sttartDDialeerSesssionn

19、當在前臺臺是,保持持一個diialerr sesssionn。首先判判斷時候需需要播放本本地鈴聲,如如果需要,則則判斷雙音音多頻是否否可用,如如果可用,則則創建一個個聲音播放放器。3.3.66) issBlueetootthAuddioCoonneccted做做一個是否否藍牙連接接的判斷。3.3.77) 如果果是cdmma通話,則則初始化OOTA狀態態,進而如如果是采用用了OTAA,則設置置InCaallSccreennModee為OTA通話話模型。3.3.88) cllearDDiscoonneccted在在檢查該通通話狀態之之前,切斷斷其他網絡絡連接。3.3.99) syyncWiithP

20、hhoneSStatee同步通話話界面與PPhonee的當前狀狀態。如果果沒有同步步成功,則則dismmissAAllDiialoggs();結束當前前的所以通通話,enndInCCallSScreeenSesssionn();關關閉通話界界面的顯示示。3.3.110) uupdatteWakkeStaate設置置基于當前前Phonne的喚醒醒狀態和屏屏幕超時,以以及通話界界面的當前前狀態。3.3.111) eenablleTouuchLoock當onreesumee時“觸摸摸鎖“疊加加是不可見見的,尤其其是這個檢檢查可確保保用戶通話話按MUNNU來喚醒醒屏幕后將將不會被鎖鎖。但如果果撥號盤是

21、是打開的,而而又需要通通話計時,則則造就了“觸摸鎖“覆蓋。4 Proofileer.jaava該類對通通話各個時時間點進行行記錄。該類對通話話各個時間間點進行記記錄。statiic loong ssTimeeCalllScreeenReequessted;/通話話界面被請請求的時間間statiic loong ssTimeeCalllScreeenOnnCreaate;/通話界界面被創建建的時間statiic loong ssTimeeCalllScreeenCrreateed;/通話界面面創建完成成后的時間間statiic loong ssTimeeIncoominggCalllPaneel

22、Reqquestted;/正在通通話時,通通話界面被被請求的時時間statiic loong ssTimeeIncoominggCalllPaneelOnCCreatte;/正在通話話時,通話話界面被創創建的時間間statiic loong ssTimeeIncoominggCalllPaneelCreeatedd;/正正在通話時時,通話界界面創建完完成后的時時間5 PhooneUttils.javaa負責責Phonne對象的的生成負責Phoone對象象的生成,主主要調用pphonee.gettForeegrouundCaall(),phonne.geetBacckgrooundCCall()

23、,phonne.geetRinnginggCalll(),phonne.diial()。5.1) placceCalll(Phhone phonne, SStrinng nuumberr, Urri coontacctReff)撥打傳入的的電話號碼碼,該函數數被InCCallSScreeen中的plaaceCaall調用用。參數phoone手機機對象;參參數nummber用用戶要撥打打的號碼;參數coontacctReff要么是“tel:”,要么么是“coontennt:/conttactss”,取決決于通話初初始化,該該參數引發發呼叫;返返回CALLL_STTATUSS_DIAALED,CA

24、LLL_STAATUS_DIALLED_MMMI,或或CALLL_STAATUS_FAILLED。5.2) placceCalllViaa(Conntextt conntextt,Phoone pphonee,Strring numbber,UUri ccontaactReef,Urri gaatewaayUrii)使用第三方方提供的網網關撥打號號碼,該函函數被InnCalllScreeen中的的placceCalll調用。如果電話話號碼是緊緊急號碼,GSM MMI碼或者CDMA碼則不能被呼叫。如果連接成立,這個方法發出一個同步調用阻止查詢來電信息,使本地采用異步查詢。參數phoone手機機對

25、象;參參數conntextt執行CalllerIInfo查查詢;參數數numbber用戶戶要撥打的的號碼,如如果號碼不不能建立連連接,則僅僅被用于建建立電話卡卡,并更新新通話記錄錄;參數ccontaactReef要么是是“tell:”,要要么是“cconteent:/conntactts”,該該參數引發發呼叫;參參數gattewayyUri用用于設置連連接的地址址;返回CCALL_STATTUS_DDIALEED或CALLL_STAATUS_FAILLED。6 PhooneAppp.jaava負責Phhone對對象頂層應應用的生成成該類是一個個普通的jjava類類,主要負負責Phoone對象象

26、頂層應用用的生成。這是一個個虛擬的PPhonee對象,它它從fraamewoork層取取得一個PPhonee對象。該該類繼承自自Appllicattion,同同時能常駐駐內存,他他和PhooneUttils一一起處理電電話操作。在onccreatte方法里里面進行各各種全局的的初始化:獲取Phoone對象象 NottificcatioonMgrr對象,PoowerMManagger對象象,SimmCardd對象等。同時內置置的Hanndlerr可以回調調處理各種種事件,如如:EVEENT_SSIM_AABSENNT,EVENNT_SIIM_NEETWORRK_LOOCKEDD,EVENNT_U

27、PPDATEE_INCCALL_NOTIIFICAATIONN等。7 CalllNottifieer.jaava監聽Phhone狀狀態改變和和teleephonny層事件件,觸發UUI行為監聽Phoone狀態態的改變和和來自teelephhony層層各種事件件,并觸發發任何有關關的UI行為(如如開始的鈴鈴聲和來電電的用戶界界面,打在在通話音,更更新通知,寫寫呼叫記錄錄條目等)。7.1) 在構造函函數中,實實現mPhonne.reegistterFoorNewwRinggingCConneectioon(thhis, PHONNE_NEEW_RIINGINNG_COONNECCTIONN, nu

28、ull);/*當有有新來電或或等待連接接時Nottifiees。收到到的訊息是是:Messsagee.objj將是一個個AsynncRessult,AsynncRessult.userrObj=obj,AsynncRessult.resuult=aa Connnecttion。因為這個個消息已經經過時,所所以通過檢檢測Connnecttion.isRiinginng()以以確保連接接有效。如如果Connnecttion.isRiinginng()為為truee,那么Coonnecctionn.gettCalll()=Phonne.geetRinnginggCalll()*/mPhonne.re

29、egistterFoorPreeciseeCalllStatteChaangedd(thiis, PPHONEE_STAATE_CCHANGGED, nulll);/*為通話狀狀態的改變變注冊nootifiicatiion。通通過調用PPreciiseCaallSttate以以獲取更準準確的通話話狀態。*/mPhonne.reegistterFoorDissconnnect(thiss, PHHONE_DISCCONNEECT, nulll);/*當由于本本地或遠程程電話掛斷斷或者出現現錯誤掛斷斷通話時NNotiffies。收到的訊訊息是:MMessaage.oobj wwill be aan

30、 AssyncRResullt,AsynncRessult.userrObj = obbj,AsynncRessult.resuult = a CConneectioon obbjectt thaat iss no longger cconneectedd.*/mPhonne.reegistterFoorUnkknownnConnnectiion(tthis, PHOONE_UUNKNOOWN_CCONNEECTIOON_APPPEARRED, nulll);/*當以前未未跟蹤noon-riinginng/waaitinng連接時時Notiifiess。這可能能是由于一一些其他實實體(如SSI

31、M卡應應用)發起起呼叫。*/mPhonne.reegistterFoorInccominngRinng(thhis, PHONNE_INNCOMIING_RRING, nulll);/*當有來來電話響鈴鈴時Nottifiees。收到到的訊息是是:Messsagee.objj willl bee an AsynncRessult,AsynncRessult.userrObj = obbj,AsynncRessult.resuult = a CConneectioon.*/另外如果是是CDMAA通訊類型型,還執行行:mPhonne.reegistterFoorCdmmaOtaaStattusChh

32、angee(thiis, EEVENTT_OTAA_PROOVISIION_CCHANGGE, nnull);/*當當CDMAA OTAA提供者位位置改變時時注冊nootifiicatiion*/mPhonne.reegistterFoorCalllWaiitingg(thiis, PPHONEE_CDMMA_CAALL_WWAITIING, nulll);/*當CDMAA呼叫等待待時注冊nnotifficattion*/mPhonne.reegistterFoorDissplayyInfoo(thiis, PPHONEE_STAATE_DDISPLLAYINNFO, nulll);/*為來自

33、網網絡顯示信信息通知注注冊。Meessagge.obbj將包含含一個AssyncRResullt。AsynncRessult.resuult將是是一個SuuppSeervicceNottificcatioon實例。*/mPhonne.reegistterFoorSiggnalIInfo(thiss, PHHONE_STATTE_SIIGNALLINFOO, nuull);/*為來來自網絡的的信號信息息通知注冊冊。Messsagee.objj將包含一一個AsyyncReesultt。AsynncRessult.resuult將是是一個SuuppSeervicceNottificcatioon實例

34、。*/mPhonne.reegistterFoorInCCallVVoiceePrivvacyOOn(thhis, PHONNE_ENNHANCCED_VVP_ONN, nuull);/*當sInCCall VoiccePriivacyy可用時注注冊nottificcatioon*/mPhonne.reegistterFoorInCCallVVoiceePrivvacyOOff(tthis, PHOONE_EENHANNCED_VP_OOFF, nulll);/*當sInCCall VoiccePriivacyy不可用時時注冊nootifiicatiion*/mPhonne.reegistte

35、rFoorCdmmaFwddBursstDtmmf(thhis, PHONNE_CDDMA_FFWD_BBURSTT_DTMMF, nnull);/*為為 CDMMA Foorwarrd Buurst DTMFF的事件通通知設置處處理程序*/mPhonne.reegistterFoorCdmmaFwddConttDtmffStarrt(thhis, PHONNE_CDDMA_FFWD_CCONT_DTMFF_STAART, nulll);/*為 CDMMA Foorwarrd Buurst DTMFF啟動的事事件通知設設置處理程程序*/mPhonne.reegistterFoorCdmmaFw

36、ddConttDtmffStopp(thiis, PPHONEE_CDMMA_FWWD_COONT_DDTMF_STOPP, nuull);/*為 CDMMA Foorwarrd Buurst DTMFF停止的事事件通知設設置處理程程序*/如果是GSSM類型,則則執行:mPhonne.reegistterFoorRinngbacckTonne(thhis, PHONNE_RIINGBAACK_TTONE, nulll);/*當帶外外回鈴音(專專業術語CCRBT:COLOOR RIING BBACK TONEE,回鈴音音定義:當當別人打電電話給您時時,他(她)聽到的聲聲音叫做回回鈴音?;鼗剽徱羰?/p>

37、指指撥打電話話的呼叫方方所聽到的的對方電話話的聲音,當當撥通電話話時聽到通通話音,通通常是長音音;而當對對方占線時時則聽到忙忙音,聲音音短促,有有時,忙音音會變成人人聲語音提提示。)時時Notiifiess。收到的的訊息是:Messsage.obj將將是一個AAsynccResuult,AsynncRessult.userrObj=obj,AsynncRessult.resuult=ttrue表表示開始播播放回鈴音音;=faalse表表示停止。*/mPhonne.reegistterFoorRessendIIncalllMutte(thhis, PHONNE_REESENDD_MUTTE, n

38、null);/*為為復位上行行靜音狀態態成上行音音頻注冊處處理程序。*/7.2) 整個類由由函數haandleeMesssage串串起來。電話部分自動撥號,判判斷號碼正正確性與否否,安全機機制。http:/weenku.baiddu.coom/viiew/cc63b6697911711ccc79331b711628.htmll撥打電話過過程:一自動撥號號是Inttent.ACTIION_CCALL,另另一種是IIntennt.ACCTIONN_DIAAl(只是是到按鍵盤盤的界面,需需要再手動動撥打)以下為CAALL的代代碼Xml代碼碼AndrooidMaanifeest.xxmlJava代代碼

39、Intenntinntentt=newwInttent(tent.actiion.CCALL,Urri.paarse(tell:+inpputSttr);starrtActtivitty(inntentt);判斷電話接接通狀態http:/m/thrread-303883-1-1.httml刪除通話記記錄負責存放呼呼叫記錄的的內容提供供者源碼在在ConttactssProvviderr項目下:源碼路徑:comandrroidprovviderrscoontacctsCCallLLogPrrovidder.jjava使用到的數數據庫在:/datta/daata/ccom.aandrooid.ppr

40、oviiderss.conntactts/daatabaases/conttactss2.dbb表名:caalls呼叫記錄錄有三種類類型:來電:CaallLoog.Caalls.INCOOMINGG_TYPPE(常量值值:1)已撥:CaallLoog.Caalls.OUTGGOINGG_TYPPE(常量量值:2)未接:CaallLoog.Caalls.MISSSED_TTYPE(常常量值:33)查看源碼碼中的聲明明:3.需要聲聲明的權限限4.系統統的通話記記錄,是通通過ConttentPProviider來對外共共享的5. UrriCalllLog.Callls.COONTENNT_URRI

41、:等價于:Uri.parsse(cconteent:/calll_loog/caalls);6.查詢詢出所有記記錄ConttentRResollver resoolverr = ggetCoontenntRessolveer();resoolverr.queery(CCallLLog.CCallss.CONNTENTT_URII, nuull, nulll, neew Sttringg1510016899022, nnull);7.查詢詢某一個聯聯系人的所所有記錄(按按電話號碼碼)resoolverr.queery(CCallLLog.CCallss.CONNTENTT_URII, nuull

42、, nummber=?, new Striing15510166890222, nulll);8.查詢詢某一個聯聯系人的所所有未接電電話記錄(按按電話號碼碼)resoolverr.queery(CCallLLog.CCallss.CONNTENTT_URII, nuull, nummber=? annd tyype=33, nnew SStrinng15110168890222, nulll);8.刪除除某聯系人人最近的一一次來電/*本代代碼因為在在Acttivitty中,所所以可以直直接調用getCConteentReesolvver()。這個方方法實際上上是Coontexxt中定定義的。*

43、/ConteentReesolvverrresollver=geetConntenttResoolverr();/*這里里涉及到內內容提供者者的知識,其其實這里是是直接在操操作Anndroiid的數數據庫,十十分痛苦*/Cursoorcuursorr=rresollver.querry(CaallLoog.Caalls.CONTTENT_URI,newwStrring_id,nnumbeer=?and(typpe=1orttype=3),neewSttringg1510016899022,_idddesscliimit1);if(cuursorr.movveToFFirstt()iintiid

44、=curssor.ggetInnt(0);rresollver.deleete(CCallLLog.CCallss.CONNTENTT_URII,_id=?,newwStrringiid+);短信部分Androoid設備備接收到的的SMS是以以pdu形式式的(prrotoccol ddescrriptiion uunit)(計算機機網絡的概概念)(AA PDUU is a pprotoocol disccripttion unitt, wwhichh is the induustryy forrmat for an SSMS mmessaage. becaause SMSMMessaage r

45、readss/wriites themm youu shoouldnnt nneed to ddisecct thhem. A laarge messsage mighht bee brooken intoo manny, wwhichh is why it iis ann arrray oof obbjectts.)androoid.ttelepphonyy.gsmm.SmssMesssage這這個類可以以儲存SMMS的相關關信息,我我們也可以以從接收到到的pduu中創建新新的SmssMesssage實實例SmsMeessagge的使用用比較特殊殊,并不直直接實例化化,而是利利用靜態方方法g

46、ettDefaault()獲得smssmanaager對對象發送短信用戶權限設設置發送部分 PenddingIIntennt pii = PPendiingInntentt.gettActiivityy(thiss, 0, neww Inttent(thiss,MaiinActtivitty.cllass), 0); SmsMManagger ssms = (SmmsMannagerr.gettDefaault(); sms.senddTexttMesssage(phonneno, nulll, cconteext, pi, nulll);publiic vooid ssendTTextMMe

47、ssaage (Striing ddestiinatiionAdddresss, SStrinng sccAddrress, Strring textt, PeendinngInttent senttInteent, PenddingIIntennt deeliveeryInntentt)destiinatiionAdddresss: 收件人人地址scAdddresss: 短信中中心號碼,空空為默認中中心號碼sentIIntennt: 當消息發發出時,成成功或者失失敗的信息息報告通過過PenddingIIntennt來廣播播。如果該該參數為空空,則發信信程序會被被所有位置置程序檢查查一遍,這這

48、樣會導致致發送時間間延長。delivveryIIntennt: 當消息發發送到收件件人時,該該PenddingIIntennt會被廣廣播。pddu數據在在狀態報告告的exttendeed daata (“pduu”)中。拋出 IlllegaalArggumenntExcceptiion 如果收件件人或者信信息為空。出錯時考慮慮是不是ttext長長度太長的的問題! 吃過兩次次虧了。= =發送彩信 HYPERLINK /thread-21150-1-1.html http:/m/thrread-211550-1-1.httml HYPERLINK /view/e2506ed850e2524de51

49、87e54.html http:/weenku.baiddu.coom/viiew/ee25066ed8550e25524dee51877e54.htmll HYPERLINK /lizhengjun2010/blog/item/3bb6c51fde5353e0af5133d9.html http:/hii.baiidu.ccom/llizheengjuun20110/bllog/iitem/3bb66c51ffde53353e00af51133d99.htmml刪除短信未嘗試packaage ppega.andrroid.sockket2;imporrt anndroiid.daatabaa

50、se.CCursoor;imporrt anndroiid.neet.Urri;imporrt anndroiid.uttil.LLog;publiic cllass DeleeteMeessagge privaate PPegaSSockeet2 ddeletteMesssagee;privaate iint iideleete;privaate CCursoor evventCCursoor, rreminnderssCurssor;privaate iint collumn = neew innt1;privaate SStrinng threeadidd = nnew SStrinng

51、1;privaate CCursoor quuerymmessaage;DeletteMesssagee(PeggaSoccket22 delleteMMessaage, int id) this.deleeteMeessagge = deleeteMeessagge;ideleete = id;Strinng urriInbbox = coontennt:/sms;Strinng projjectiion = neww Strring thrread_id ;Uri uuriSmms = Uri.parsse(urriInbbox);Strinng whhere = _id = + Intt

52、egerr.toSStrinng(iddelette);queryymesssage = deeleteeMesssage.getCConteentReesolvver().queery(uuriSmms,projeectioon, wwheree, nuull, nulll);privaate vvoid MoveeToFiirst() queryymesssage.moveeToFiirst();publiic innt DeeleteeShorrtMesssagee() if (qqueryymesssage.getCCountt() != 0) MoveTToFirrst();thre

53、aadid0 = thhreadd_id;colummn0 = qqueryymesssage.getCColummnInddex(threead_iid);threaadid0 = queerymeessagge.geetStrring(coluumn00);/ deeletee messsageeint nnumbeer = deleeteMeessagge.geetConntenttResoolverr().ddelette(Uri.pparsee(coontennt:/sms/convversaationns/ + thhreaddid00),_id = + iddelette, nn

54、ull);Log.ee(deeletee_nummber, Inntegeer.tooStriing(nnumbeer);if (nnumbeer != 0)returrn 1;elsereturrn 0; elsse Log.ee(nuumberr, cannnt ffine the messsage!);returrn 0;通過主鍵iid來找到到他對應的的threead_iid。然后后進行刪除除就可以了了2: HYPERLINK /ameyume/archive/2010/12/08/6064230.aspx http:/ameyyume/archhive/20100/12/08/6606

55、42230.aaspx HYPERLINK /blog/641553 http:/biingtiian.jjavaeeye.ccom/bblog/6415553監聽短信收收發兩種方式利用廣播缺點:查看BrooadReeceivver ssdk rreferrencee , 可可以了解到到所有的BBroaddReceeiverr對短信的的接收是無無順序的狀狀態 ,即使是是使用了OOrderred bbroaddcastts對于同同等優先級級別的BrroadRReceiiver ,也會產產生無順序序的行為。流程理解:用bunddle從inteent.ggetExxtrass中得到,再再用objje

56、ct從bunddle.gget(pduss)得到,此此時為pddu形式,接接著用SmmsMesssagee.creeateFFromPPdu (bytte) pduusObjji)一位位的的讀到SmmsMesssagee mmsg中(每每個i表示的是是一條短信信,此時為為 smssmesssage格格式),接接著再對每每個msggi.getMMessaageBoody()得到短信信的內容sstrinng puublicc claass rreceiive eextennds BBroaddcasttReceeiverr Strring receeiveMMsg = ;pubblic voidd

57、 onRReceiive(CConteext cconteext, Inteent iintennt)SmssMesssage mssg= nnull;if (inttent.getAActioon().equaals(vviderr.Tellephoony.SSMS_RRECEIIVED) Buundlee bunndle = inntentt.gettExtrras();if (bunndle != nnull) Objject pddusObbj = (Objject) bbundlle.geet(ppdus); / bunddle 中中存儲了信信息,有傳傳遞的作用用,既然有有get.,

58、前面面一定有存存入以這個個字符串一一個鍵值對對的形式儲儲存了vaaluess!把pddus理解解為一種標標識符!msgg= neew SmmsMesssageepduusObjj.lenngth;forr (innt i = 0; i pdussObj.lenggth; i+)msggi = SmmsMesssagee.creeateFFromPPdu (bytte) pduusObjji);forr(intt i = 0; i msg.lenggth; i+)Strring msgTTxt = msggi.getMMessaageBoody(); if (msgTTxt.eequalls(T

59、Testiing!)Toaast.mmakeTText(conttext, suuccesss!, Toaast.LLENGTTH_LOONG).showw();retturn;elsseToaast.mmakeTText(conttext, msggTxt, Toaast.LLENGTTH_LOONG).showw();retturn;retturn;利用數據庫庫/如下 主要用于于內部數據據庫改變,向向外面的界界面(Acctiviity)做做反應classs SMSSHanddler exteends Handdlerppubliic vooid hhandlleMesssagee(Mess

60、sagee msgg)/Haandlee messsagee/ 對收收到短消息息后,做出出的處理,這里直接接刪除,并并沒有反應應到界面,所所以上面的的handdleMeessagge是空的的。classs SMSSObseerverr exttendss ConntenttObseerverrpprivaate HHandlle m_handdle = nulll;ppubliic SMMSObsserveer(Haandlee hanndle)supeer(haandlee);m_haandlee = hhandlle;ppubliic vooid oonChaange(boollean b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論