Phone去电请求及响应(framework层)

打电话请求流程
1.进入键盘界面(TwelvekeyDialer),点击dialButton发送ACTION_CALL_PRIVILEGED动作来启动OutgoingCallBroadcaster.
2.OutgoingCallBroadcaster对紧急号码进行处理后发ACTION_NEW_OUTGOING_CALL广播,由内部类OutgoingCallReceiver接收,由该类来启动InCallScreen。
3.InCallScreen的onCreate中调用initInCallScreen初始化打电话界面,registerForPhoneStates注册电话状态监听,由内部Handler对象来处理监听(用于对底层的响应,在打电话响应流程中会使用),再调用internalResolveIntent,该方法中调用placeCall发送打电话请求。
4.placeCall中通过调用PhoneUtils的placeCall实现,PhoneUtils的placeCall再调用GSMPhone的dial方法,该方法再调用GSMCallTracker.dial方法。而GSMCallTracker持有CommandInterface对象,即RIL类的实例。RIL的dial方法对intent进一步处理,再调用自身的send方法发送RILRequest对象,由内部类RILSender对象代理发送,该对象通过LocalSocket写入输出流中。套接字方法在LocalSocketImpl中由native函数实现。
上述步骤即完成了从用户发送打电话请求到框架层向底层发送請求的流程,然后通过socket转到RIL层处理dial請求。

打电话响应流程
1.RIL中的内部类RILReceiver监听守护进程rild的上报,从套接字中读取上报信息,并依次调用readRilMessage,processResponse,processSolicited进行处理。
2.processSolicited方法向GSMCallTracker对象发送消息。GSMCallTracker对象的handlerMessage方法进行处理。接着调用updatePhoneState方法更新状态。
3.该方法调用GSMPhone.notifyPreciseCallStateChanged,进而调用RegistrantList对向的intelNotifyRegistrants,该方法循环处理已经注册到RegistrantList中的事件,然后通过Registrants向注册的handler发送消息。
4.InCallScreen中注册的handler将会接收到消息,并来响应onPhoneStateChanged事件。该事件进而调用updateScreen来更新界面。
上述过程即完成了从RIL层到应用层的响应过程。
打电话的請求流程和响应流程基本涵盖了RIL层与应用层的消息传递流程。诸如来电流程及应答流程的通信方式基本相似。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值