1目录1基本要求..........................................................................................................................................12打电话流程......................................................................................................................................12.11OutgoingCallBroadcaster.java..........................................................................................22.22OutgoingCallReceiver.java...............................................................................................22.33InCallScreen.java——负责通话的那一个界面..............................................................22.3.13.1)onCreate(第一次).................................................................................................22.3.23.2)onNewIntent(非第一次)。..................................................................................32.3.33.3)onResume.............................................................................................................32.44Profiler.java——该类对通话各个时间点进行记录。...................................................32.55PhoneUtils.java——负责Phone对象的生成.................................................................32.5.15.1)placeCall(Phonephone,Stringnumber,UricontactRef).....................................42.5.25.2)placeCallVia(Contextcontext,Phonephone,Stringnumber,UricontactRef,UrigatewayUri)..............................................................................................................................42.66PhoneApp.java——负责Phone对象顶层应用的生成..................................................42.77CallNotifier.java——监听Phone状态改变和telephony层事件,触发UI行为........43电话部分..........................................................................................................................................53.1判断电话接通状态.............................................................................................................63.2删除通话记录.....................................................................................................................64短信部分..........................................................................................................................................84.1发送短信.............................................................................................................................84.2发送彩信.............................................................................................................................84.3删除短信.............................................................................................................................84.4监听短信收发...................................................................................................................104.4.1利用广播...............................................................................................................104.4.2利用数据库...........................................................................................................114.5收到短信不顶栏通知.......................................................................................................154.6获取短信内容...................................................................................................................151基本要求1.1要求能够向指定的号码发起呼叫;1.2能够监视呼入事件,并得到呼入的号码;1.3尝试对呼入事件进行处理(显示给用户或者直接拒绝);1.4通话记录的获取以及删除;1.5上述技术点都涉及到应用程序安全授权问题,研究Android在保证应用程序安全上采用的方法。2打电话流程,进入通话的Phone包。此时首先进入的函数OutgoingCallBroadcaster.java,该类是一个Activity。由activity的生命周期可知,第一次进入时应调用onCreate()函数。(在该类中也只实现了这个函数。)解析一下这个函数:1.1)首先获取Intent对象,获取拨出的号码。1.2)接着判断号码是否为紧急号码,如果是紧急号码,将callNow变量赋值为true,启动InCallScreen,并发送广播。而在receiver里面判断callNow为ture就直接finish,而不再重复启动InCallScreen;如果不是紧急号码,将callNow变量赋值为false,发送广播“Intent.ACTION_NEW_OUTGOING_CALL”。2.22OutgoingCallReceiver.java广播发送后OutgoingCallReceiver将会收到该息。该类是一个内部类,在类OutgoingCallBroadcaster里面,作用是接收OutgoingCallBroadcaster发送的广播,判断是否已经启动InCallScreen。没有启动的话就进行一些初始化,如:对OTA进行初始化。接收到广播之后,从Intent里面取出电话号码及其URi。然后,设置Intent为ACTION_CALL,并带上号码和uri。启动InCallScreen。关闭该Activity。OTA:Over-the-AirTechnology空中下载技术,是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。空中接口可以采用WAP、GPRS、CDMA1X及短消息技术。OTA技术的应用,使得移动通信不仅可以提供语音和数据服务,而且还能提供新业务下载。GSM:GlobalSystemforMobileCommunications,中文为全球移动通讯系统,俗称全球通。CDMA:CodeDivisionMultipleAccess,又称码分多址,是在无线通讯上使用的技术,CDMA允许所有的使用者同时使用全部频带(1.2288Mhz),并且把其他使用者发出的讯号视为杂讯,完全不必考虑到讯号碰撞(collision)的问题。CDMA的优点包括:CDMA中所提供的语音编码技术,其通话品质比目前的GSM好,而且可以把用户对话时周围环境的噪音降低,使通话更为清晰。2.33InCallScreen.java——负责通话的那一个界面该类extends了Acitivity,并且implements了OnClickListener,OnTouchListener和OnQueryCompleteListener。该类主要是负责通话的那一个界面,并且还负责菜单项各种按键事件和触摸时间的处理。同时本类还复写的finish()方法,所以一般不会被finish掉,调用这个方法时它又把自己放回栈中。InCallScreen可以接收这个Intent并启动。2.3.13.1)onCreate(第一次)3.1.1)callScreenOnCreate获得通话界面被创建的时间。3.1.2)PhoneApp唤醒后台的服务程序。3.1.3)判断当前的通话状态(IDLE=没有通话行为,RINGING=正在通话或呼叫等待,OFFHOOK=Thephoneisoffhook.Atleastonecallexiststhatisdialing,activeorholdingandnocallsareringingorwaiting.),如果正在通话,不会出现键盘锁。接着设置mPhoneandmForegroundCall/mBackgroundCall/mRingingCall。3.1.4)getBluetoothHandsfree设