项目场景:

提示: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

  1. 在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动。
  2. android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。
  3. 总体来说它的主要作用是:是否支持其它应用调用当前组件。

解决方案:

提示:packages/services/Telephony, AndroidManifest.xml: 加入android:exported="true"的属性

从Android S 开始,在app的AndroidManifest.xml
          里面的service、activity、receiver和provider都必须添加android:exported="true"或"false",否则app可能会安装失败,出现不可用的情况。