mt call消息流程 android来电流程
1、 RIL.java Receiver RIL 收到 RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED 消息,通过 RegistrantList 通知 GsmCallTracker 通话状态发生变化 2、 GsmCallTracker.java --- EVENT_CALL_STATE_CHANGE GsmCallTracker 在收到 EVENT_CALL_STATE_CHANGE 消息以后,会调用 RIL 的 getCurrentCalls(),向 Modem 轮询当前的通话情况。 3、 GsmCallTracker.java --- EVENT_POLL_CALLS_RESULT 查询完成以后,Modem 通过 EVENT_POLL_CALLS_RESULT 消息通知 GsmCallTracker 查询 结果。 4、 GsmCallTracker.java --- EVENT_POLL_CALLS_RESULT 如果是最近一个查询所得的结果,则处理之(在 handlePollCalls() 函数中) 。 handlePollCalls()处理逻辑: 5、 CallManager.java --- EVENT_NEW_RINGING_CONNECTION CallManager 进一步通过 PHONE_NEW_RINGING_CONNECTION 消息通知 CallNotifier 对象。 6、 CallNotifier.java --- PHONE_NEW_RINGING_CONNECTION CallNotifier 收到 PHONE_NEW_RINGING_CONNECTION 消息以后,通过函数 onNewRingingConnection()来处理该消息。 onNewRingingConnection()处理逻辑见下图: 1 、…………………………………. 一堆逻辑…………………………………. 2 、如果有新的来电,则通过 GsmCallTracker 对应的 Phone 对象通 过异步消息 EVENT_NEW_RINGING_CONNECTION 来通知 CallManager 对象1、如果需要忽略所有来电,则直接挂断电话 2、异常处理(Connection 为空,或者状态不正确) 3、如果不是 Waiting Connection,则执行 startIncomingCallQuery,查询铃声信息 4、如果是 Waiting Connection ,则直接显示来电界面。 5、查询铃声结束或者查询铃声超时,都会调用 onCustomRingQueryComplete(),在此函数中播放来电铃声,调用 showIncomingCall()显示来电界面。 6、showIncomingCall()会调用 PhoneApp 的 NotificationManager 的 updateNotificationAndLaunchIncomingCallUi()来显示来电通知和来 电界面。