第三部分, 流程分析

1.Outgoing Call流程。

v
TwelveKeyDialer.java

|_onKeyUp()

|_placeCall()

v
OutgoingCallBroadcaster.java,

|_onCreate()

|_sendOrderedBroadcast(broadcastIntent, PERMISSION,

new OutgoingCallReceiver(), null, Activity.RESULT_OK, number,null);


|_
OutgoingCallReceiver


|_onReceive()

|_ doReceive()

|_context.startActivity(newIntent);

v
InCallScreen.java

|_ onCreate()

|_onNewIntent()

|_placeCall()

v
PhoneUtils.java

|_placeCall()

v
GSMPhone.java,

|_dial()

v
GsmCallTracker.java,

|_dial()

v
RIL.java

|_dial()

|_
RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);


|...


|send(rr);

2.
Incoming Call的流程:

v
创建GsmPhone时,mCT = new GsmCallTracker(this);

v
创建GsmCallTracker时:

Ø
cm.registerForCallStateChanged(this, EVENT_CALL_STATE_CHANGE,null);

Ø
mCallStateRegistrants.add(r);

v
RIL中的RILReceiver线程首先读取从rild中传来的数据:

Ø
processResponse()

Ø
processUnsolicited()

v
对应于incoming call,RIL收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息,触发mCallStateRegistrants中的所有记录。

v
GsmCallTracker处理EVENT_CALL_STATE_CHANGE,调用pollCallsWhenSafe

v
函数pllCallsWhenSafe 处理:

§
lastRelevantPoll = obtainMessage(EVENT_POLL_CALLS_RESULT);

§
cm.getCurrentCalls(lastRelevantPoll);

v
RIL::getCurrentCalls

§
RILRequestrr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS,result);

§
...

§
send(rr);

v
接着RIL调用processSolicited处理RIL_REQUEST_GET_CURRENT_CALLS的返回结果

v
GsmCallTracker的handleMessage被触发,处理事件EVENT_POLL_CALLS_RESULT,调用函数 handlePollCalls

v
handlPollCalls 调用phone.notifyNewRingingConnection(newRinging);

v
PhoneApp中创建CallNotifier

v
CallNotifier注册:

§
registerForNewRingingConnection ->mNewRingingConnectionRegistrants.addUnique(h, what, obj);

更多相关文章

  1. Android MediaServer初始化流程
  2. android system server 启动流程
  3. Android 四大组件 之 bindService流程
  4. Android Activity(一)启动流程
  5. Unity导出Android工程生成apk安装包流程
  6. Android 关机流程分析-----(1)Framework层
  7. Android系统(245)---SystemServer进程的创建流程
  8. (连载)Android 8.0 : 系统启动流程之Linux内核

随机推荐

  1. Golang在阿里巴巴调度系统Sigma中的实践
  2. Rancher 2.2.5发布,CVE修复,支持K8S 1.15
  3. 新东方的Kubernetes实践:从服务化ES到Kafk
  4. spark workCount 求和
  5. 【实战案例】Ajax请求第三方接口数据利用
  6. ExFat文件系统文件误删除. 不知道如何找
  7. 喵喵的华为DevCloud使用指南(3)-项目构建
  8. 网络编程基础2
  9. BlueStore源码分析之事物状态机
  10. 分组密码与模式