Android RIL源码分析(3)

本文详细剖析了Android系统中电话模块的OutgoingCall与IncomingCall流程,包括TwelveKeyDialer的按键处理、OutgoingCallBroadcaster的广播发送、InCallScreen的呼叫启动以及GSMPhone与GsmCallTracker的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三部分, 流程分析

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值