目录

应用网络类型与显示状态不匹配

问题现象

在应用使用过程中,需要根据不同的网络类型执行相应的操作。例如,根据当前的网络环境(如移动数据或Wi-Fi)来决定是否自动播放下载的视频。同时,应用有需要显示当前手机的网络制式(如4G、5G或Wi-Fi)的场景,但有时显示的网络状态与实际网络环境不符。

背景知识

问题定位

  1. 搜索register,检查是否注册网络监听(当网络可用时,会收到netAvailable事件的回调;当网络不可用时,会收到netUnavailable事件的回调)。
  2. 搜索on('netAvailable')/on('netLost')等,检查是否在调用register接口后订阅网络可用/丢失等事件,并执行相应的操作。
  3. 搜索getDefaultNet/getDefaultNetSync,检查是否在on('netAvailable')事件中获取默认激活的数据网络。继续搜索getNetCapabilities/getNetCapabilitiesSync,检查是否获取netHandle对应网络的能力信息,能力信息包含了网络类型(蜂窝网络、Wi-Fi网络、以太网网络等)。
    • 默认网络是Wi-Fi,则直接确认网络类型是Wi-Fi。
    • 默认网络是蜂窝网络,搜索getSignalInformation,检查是否获取指定SIM卡槽对应的注册网络信号强度信息列表,返回SignalInformation对象的数组中携带网络类型NetworkType。

分析结论

由于未通过register监听网络状态变化,并使用on('netAvailable')/on('netLost')订阅网络可用/丢失等事件来动态更新网络类型和业务逻辑,或者相应逻辑不完善导致故障现象。

修改建议

  1. 调用createNetConnection方法,创建一个NetConnection对象。
  2. 调用该对象的register方法,订阅指定网络状态变化的通知。当网络可用时,会收到netAvailable事件的回调;当网络不可用时,会收到netUnavailable事件的回调。
  3. 调用该对象的on('netAvailable')、on('netUnavailable')和on('netLost')等方法,传入type和callback,订阅关心的事件,并获取相应网络类型。
  4. 当不使用该网络时,可以调用该对象的unregister方法,取消订阅。

详情请参考管理网络连接。