Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍

功能介绍

根据设备的网络连接情况更新状态栏显示的运营商及网络状态。

注册上WFC(WiFi Calling)后,支持客制化显示左上角状态栏中的运营商网络状态信息 。具体的代码逻辑在CarrierDisplayNameResolver.java。

ServiceStateTracker 网络状态变化触发更新,流程如下:

  1. updateSpnDisplay(),有以下场景会更新SPN:
    1. onSubscriptionsChanged() 注册状态变化时
    2. BroadcastReceiver() 收到广播
      1. Intent.ACTION_LOCALE_CHANGED
      2. TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED
    3. handleMessage() 收到消息处理
      1. EVENT_ICC_CHANGED
      2. EVENT_NITZ_TIME
      3. EVENT_IMS_CAPABILITY_CHANGED
      4. EVENT_RUIM_RECORDS_LOADED
    4. setImsRegistrationState(final boolean registered)——It's possible ServiceState changes did not trigger SPN display update; we update it here
    5. pollStateDone()——Trigger updateSpnDisplay when 1. Service state is changed. 2. phone type is Cdma or CdmaLte and ERI text has changed.
  2. updateSpnDisplayCdnr()
  3. getCarrierDisplayNameData()
  4. resolveCarrierDisplayName()
  5. getCarrierDisplayNameFromWifiCallingOverride()
    1. 获取com.android.internal.R.array.wfcSpnFormats值

Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍_第1张图片

相关类:/frameworks/opt/telephony/src/java/com/android/internal/telephony/

  • /cdnr/CarrierDisplayNameResolver.java(可客制化抽出来做telephony-common.jar)
  • ServiceStateTracker.java
  • /cdnr/CarrierDisplayNameData.java(序列化对象)
//frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java

    //1. SS 变化更新SPN显示 
    public void updateSpnDisplay() {
        if (mCarrierConfig.getBoolean(
            CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL)) {
    

你可能感兴趣的:(Telephony,Android,Telephony,网络通信,Android,Telephony,SPN,PLMN,WiFiCalling)