signal信号显示代码分析(UI)

1关键字

OpenHarmony 4.1 Release;使能;vendor;telephony;modem;signal

2 问题描述

2.1 运行环境

  • 开发板型号:uis7885

  • 芯片:7885

  • 系统版本:OpenHarmony-4.1-Release(以该版本为基线)

  • 应用软件:modem适配so库,芯片modem闭源库

2.2 问题现象

插入SIM卡,设备开机,查看主屏幕界面,状态栏处的信号,有概率显示为空。。

 

2.3 测试步骤

1.开发板插入sim卡

2.开发板开机,按电源键,点亮屏幕

3.查看信号强度显示

有概率出现信号强度显示为空现象

3 问题原因

UI层信号显示,在systemUI应用中,代码如下

 

应用调用getSignalInformation()函数中获取信号信息,并显示在界面上。

getSignalInformation()函数说明文档

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-telephony-kit/js-apis-radio.md#radiogetsignalinformation7

 

界面信号显示为空,原因应该是getSignalInformation()函数中获取信号信息为空,需要查找getSignalInformation()函数返回的信号数据为什么为空。

4 定位过程

跟踪getSignalInformation()函数的调用流程。

getSignalInformation()函数映射GetSignalInfoList()

 

NAPI函数GetSignalInfoList()调用底层函数NativeGetSignalInfoList()

 

NativeGetSignalInfoList()函数调用GetSignalInfoList()函数

 

CoreService::GetSignalInfoList()调用NetworkSearchManager的GetSignalInfoList()函数

 

调用NetworkSearchManager的GetSignalInfoList()函数

 

调用NetworkSearchHandler的GetSignalInfo()函数

 

调用SignalInfo的GetSignalInfoList()函数来获取信号数据

 

在SignalInfo::GetSignalInfoList()函数中,首先判断2G信号,3G信号,4G信号,5G信号是否有效。

再获取有效的信号的数据,放入到signals结构中。传递给上层数据使用。

开发者如果发现信号信息不显示在UI界面上,就需要在信号数据的过程中和信号数据的源头查找问题的原因。

以lte信号为例,信号数据赋值在SignalInfo::ProcessLte()函数中

 

2G,3G,4G,5G信号赋值在SignalInfo::ProcessSignalIntensity()函数中

 

在该函数中的第143行,有所有信号数据的打印信息,但是是debug打印,开发者调试时可以打开debug打印,来从hilog日志中查看信号数据的原始数据。

PrintfLog()函数中打印信号的详细信息。

 

打印日志如下

 

 

5 知识分享

在定位信号为空问题过程中,需要熟悉信号在应用层如何显示,如何获取,如何赋值的,在整个流程中的每一个步骤都进行排查,这样就能定位出是流程中哪个环节中出现了问题。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐