项目场景:
提示:Android R到Android S,
Telephony is null.
例如:项目场景:示例:Android R代码升级到Android S, 在射频驱动,SIM识别流程都OK情况下,因为telephony 服务的异常,导致状态栏出现sim识别信号图标。setting显示空三角状态。
问题描述
Android R到Android S,出现sim 卡不识别问题
Debug 过程:
(1)比对机器升级前后QRCT读出来的RF状态(RFC debug),基本一致(无报错,band 都是pass)。
(2)比对机器升级前后的SIM卡槽四个信号管脚状态,开机波形图基本相同(四个信号关键开机时序图)。
(3)比对机器内部的rfc的Mbn文件,跟编译生成一致(rfc 驱动生成的为nv值_0_0+.so的文件,在/vendor/firmware_mnt/image/modem_pr/so, 该编译生成的so是编译后被打包到modem镜像中)。
(4)将升级的前的rfc mbn强制推送到新的modem,android一直重启进不来桌面(这个可能是BP不匹配AP导致的)。
(5)比对QXDM抓取升级前后的uimdrv的log,都有许多错误,暂时无法判断到底哪个错误可能会导致目前手机不识卡情况出现(没有理解sim卡识别过程和关键log导致的)。
(6)开机抓取dmes和logcat log , 暂时没有关于rfc的mbn加载的log输出,无法判断mbn加载情况(这部分log未找到,应该没有打印出来)。
进一步debug:
从上面过程可以看到,RFC配置驱动应该是OK的,QRCT能读出RFC 的band信息和结果(pass).但是sim卡识别异常还有待debug, 可以肯定的是开机时候sim管脚上电时序是OK的,并且并不存在识别电压1.8切换到3v识别的情况。所以,要进一步定位问题,就要看qxdm log 中UIM的log输出。
UIM_1: uim power up @ 1.8 v ---开机上电
UIM_1: PHY_ID-0x1, LOGICAL_ID-0x1, ACTIVITY_STATUS-0x1, iccid_len = 0xa, ICCID : 0x9868109187176032173 ---返回了CCID值,读取正常。
UIM_1: Reporting QMI latest physical slot status ---卡槽有状态反馈,并且我理解是正常的。
综上,感觉RFC驱动配置是正常的,UIM驱动和sim卡识别也是正常。状态栏的显示图标不出现,还需要进一步定位。
原因分析:
完整的SIM卡工作分为modem + AP, 其中AP的telephone 负责与modem进行通讯,当AP侧telephone异常后,所有关于phone的显示也会异常。
从开机的logcat log中会有如下错误:
04-28 07:00:36.916 2211 2211 D KeyguardUpdateMonitor: handleServiceStateChange(subId=-1, serviceState=null
04-28 07:00:36.916 2211 2211 W KeyguardUpdateMonitor: invalid subId in handleServiceStateChange()
04-28 07:00:36.920 2211 2211 E EmergencyButton: Fail to call TelephonyManager.requestCellInfoUpdate
04-28 07:00:36.920 2211 2211 E EmergencyButton: java.lang.IllegalStateException: Telephony is null
上层同事修改:packages/services/Telephony
AndroidManifest.xml: 加入android:exported="true"的属性 Android相关属性的介绍:android:exported = true
|
解决方案:
提示:packages/services/Telephony, AndroidManifest.xml: 加入android:exported="true"的属性
从Android S 开始,在app的AndroidManifest.xml
里面的service、activity、receiver和provider都必须添加android:exported="true"或"false",否则app可能会安装失败,出现不可用的情况。