【移动网络】【T43-自由测】手机插SIM卡后无法在双卡与网络中
【移动网络】【T43-自由测】手机插SIM卡后无法在双卡与网络中启用卡,同时也无法呼入或呼出电话
需要修改两个问题:
1 弹框UI 的修改
2 Sim卡禁用开关无效问
问题二 Sim卡禁用无效问题是: Qcom自扩展的service IQcrilMsgTunnel 没有得到初始化造成的
Attempt to invoke interface method 'int com.qualcomm.qcrilmsgtunnel.IQcrilMsgTunnel.sendOemRilRequestRaw(byte[], byte[], int)' on a null object reference
我们需要了解QcrilOemHook是 最终是通过IQtiOemHook使用HIDL去下发request,此处设计和RIL的HIDL设计一样
So, what's Hidl?
Sim卡启用禁用过程: App
-->bindIExtTelephony.Stub(ExtTelephonyServiceImpl.activateUiccCard)-->QtiUiccCardProvisioner-->QtiRilInterface
-->QcRilHook(sendQcRilHookMsg)
-->bind service to IQcrilMsgTunnel: IQcrilMsgTunnel(sendOemRilRequestRaw)
-->IQcrilMsgTunnel.Stub(QcrilMsgTunnelIfaceManager)
在QtiRilInterface中会初始化QcRilHook对象,在QcRilHook的构造函数中会先start QcrilMsgTunnelService,然后bind,
然而Log中没有打印出 QcRilHook构造函数中的相关Log
但是往下看Log可以看到QtiRilInterface在初始化的时候QcrilMsgTunnelService还没有启动起来,
所以肯定会导致bind service失败, 最终导致sim卡禁用的命令无法下发
03-04 07:42:17.979 15889 15889 D QtiRilInterface: in constructor
03-04 07:42:18.083 16202 16202 D QcrilMsgTunnelService: onCreate method
03-04 07:42:18.086 16202 16202 D QcrilMsgTunnelIfaceManager: :Instantiated
所以我们分析得出的原因是因为QcrilMsgTunnelService启动太晚,至少晚于ExtTelephonyServiceImpl的启动,导致得不到QcrilMsgTunnelIfaceManager的服务,最终导致sim卡禁用和打开无效。
所以我们的问题是: 为什么这次QcrilMsgTunnelService启动晚了?
按照正常逻辑它该什么时候启动?
备注:通过fastboot刷机后首次重启会出现此现象,再次重启后不存在了。