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卡数数据及应用用进行远程程管理的技技术。空中中接口可以以采用WAAP、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,回铃音音定义:当当别人打电电话给您时时,他(她)听到的声声音叫做回回铃音。回回铃音是

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

提交评论