远程挂断电话流程分析

3,远程挂断电话流程分析

3.1 services Telephony

当远程挂断/拒接电话时,GsmCallTracker的handlePollCalls 方法有关代码如下,

if (mDroppedDuringPoll.size() > 0) {
   mCi.getLastCallFailCause(
       obtainNoPollCompleteMessage(EVENT_GET_LAST_CALL_FAIL_CAUSE));
}

由于不是主动发起的挂断流程,因此会向RIL发送消息获取通话断开的cause,

RIL的getLastCallFailCause方法如下,

public void  getLastCallFailCause (Message result) {
RILRequest rr = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
send(rr);
}

注意,此时封装了EVENT_GET_LAST_CALL_FAIL_CAUSE消息。

向ril库发送RIL_REQUEST_LAST_CALL_FAIL_CAUSE消息,ril处理查询完成之后,返回上报结果, processSolicited方法中

对该消息处理如下,

1,读取消息处理结果,

case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseFailCause(p); break;

responseFailCause方法如下,

private Object responseFailCause(Parcel p) {
    LastCallFailCause failCause = new LastCallFailCause();
    failCause.causeCode = p.readInt();
    if (p.dataAvail() > 0) {
       failCause.vendorCause = p.readString();
    }
    return failCause;
}

返回的是LastCallFailCause对象。

2,分发消息给对应的注册类处理,

if (rr.mResult != null) {
     AsyncResult.forMessage(rr.mResult, ret, null);
     rr.mResult.sendToTarget();
}

GsmCallTracker的handleMessage方法中对EVENT_GET_LAST_CALL_FAIL_CAUSE消息处理如下,

1,首先获取结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值