小议UNSOL_RESPONSE_CALL_STATE_CHANGED与GET_CURRENT_CALLS

本文探讨了手机通话状态更新的机制,特别是如何处理GET_CURRENT_CALLS和UNSOL_RESPONSE_CALL_STATE_CHANGED消息。当进行通话操作如拨打、挂断时,会发送消息并等待异步应答。operationComplete()方法用于标记业务操作结束,pendingOperations计数器确保消息同步。若因网络延迟导致应答未收到,可能影响通话状态更新,提出了对此异常情况的思考。

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

  在之前的讨论中我们曾经看到,GsmCallTracker所维护的每一路GsmConnection都需要从modem侧及时更新当前通话状态。那么,这个CLCC是如何从framework侧发送的呢?


  在ril.java中有方法getCurrentCalls(Messageresult),该方法即是将GET_CURRENT_CALLS的消息打包以socket方式发到cp侧,再转换为AT+CLCC指令发送到网络端的。


  再往上看,会发现在GsmCallTracker中有方法operationComplete(),是它调用了getCureentCalls方法。有趣的是,这个方法中还有个实例变量pendingOperations用来计数,具体是做什么用的,后面会说到。

 

  统计了一下,调用这个operationComplete()方法的,都是在framework侧收到这些消息的时候:

EVENT_OPERATION_COMPLETE

EVENT_SWITCH_RESULT

EVENT_CONFERENCE_RESULT

EVENT_SEPARATE_RESULT

EVENT_ECT_RESULT

EVENT_GET_LAST_CALL_FAIL_CAUSE

 

  对于前五种消息,相信经常折腾framework侧Call业务的童鞋都不会陌生。像dial,reject,acceptCall,以及切换前后台通话,合并通话等等业务操作,都会将这几个对应的消息用obtain系列的方法包成Message参数发下去,等待指令操作完之后再带着消息回传上来,以此解决异步消息应答消息不同步的问题。而消息EVENT_GET_LAS

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值