【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响

本文主要是介绍【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

业务简介

在网络状态变化的时候(数据或WiFi),会更新SPN。

基于Android U的代码分析。

分类:SPN Data_Dic-的博客-CSDN博客

功能逻辑

状态说明

  • 飞行模式下注册上WFC的话,注册状态MD上报
    • regState: NOT_REG_MT_NOT_SEARCHING_OP, rat: UNKNOWN
  • DataReg一直都是PowerOff或者out of service状态,此时不会更新spn
    •  [GsmSST0] Broadcasting ServiceState : {mVoiceRegState=3(POWER_OFF), mDataRegState=3(POWER_OFF),
    • updateSpnDisplay: radio is off w/ showPlmn=true plmn=null

更新网络状态 ServiceStateTracker.java

frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java

MTKSST实现中handlePollStateResult()和pollStateDone()都会refreshSpn()刷新SPN,区别于源码的 updateSpnDisplay(),并且在上述两个state接口执行时就刷新,时间比 updateSpnDisplay 还早。

代码流程:

  1. handlePollStateResult
  2. pollStateInternal()
  3. pollStateDone()
  4. updateSpnDisplay()--radio off不会更新 

日志分析

03-04 18:31:51.632486  3799  3799 D MTKSST  : [GsmSST0] Broadcasting ServiceState : {mVoiceRegState=0(IN_SERVICE), mDataRegState=0(IN_SERVICE), mChannelNumber=2959, duplexMode()=0, mCellBandwidths=[], mOperatorAlphaLong=Orange SP, mOperatorAlphaShort=Orange SP, isManualNetworkSelection=false(automatic), getRilVoiceRadioTechnology=3(UMTS), getRilDataRadioTechnology=11(HSPA), mCssIndicator=unsupported, mNetworkId=-1, mSystemId=-1, mCdmaRoamingIndicator=-1, mCdmaDefaultRoamingIndicator=-1, mIsEmergencyOnly=false, isUsingCarrierAggregation=false, mArfcnRsrpBoost=0, mNetworkRegistrationInfos=[NetworkRegistrationInfo{ domain=PS transportType=WLAN registrationState=NOT_REG_OR_SEARCHING networkRegistrationState=NOT_REG_OR_SEARCHING roamingType=NOT_ROAMING accessNetworkTechnology=UNKNOWN rejectCause=0 emergencyEnabled=false availableServices=[] cellIdentity=null voiceSpecificInfo=null dataSpecificInfo=android.telephony.DataSpecificRegistrationInfo :{ maxDataCalls = 0 isDcNrRestricted = false isNrAvailable = false isEnDcAvailable = false mLteAttachResultType = 0 mLteAttachExtraInfo = 0 LteVopsSupportInfo :  mVopsSupport = 1 mEmcBearerSupport = 1 } nrState=**** rRplmn=null isUsingCarrierAggregation=false}, NetworkRegistrationInfo{ domain=CS transportType=WWAN registrationState=HOME networkRegistrationState=ROAMING roamingType=NOT_ROAMING accessNetworkTechnology=UMTS rejectCause=0 emergencyEnabled=false availableServices=[VOICE,SMS,VIDEO] cellIdentity=CellIdentityWcdma:{ mLac=1134 mCid=149649449 mPsc=358 mUarfcn=2959 mMcc=214 mMnc=03 mAlphaLong=Orange SP mAlphaShort=Orange SP mAdditionalPlmns={} mCsgInfo=null} voiceSpecificInfo=VoiceSpecificRegistrationInfo { mCssSupported=false mRoamingIndicator=0 mSystemIsInPrl=0 mDefaultRoamingIndicator=0} dataSpecificInfo=null nrState=**** rRplmn=21403 isUsingCarrierAggregation=false}, NetworkRegistrationInfo{ domain=PS transportType=WWAN registrationState=HOME networkRegistrationState=ROAMING roamingType=NOT_ROAMING accessNetworkTechnology=HSPA rejectCause=0 emergencyEnabled=false availableServices=[DATA] cellIdentity=CellIdentityWcdma:{ mLac=1134 mCid=149649449 mPsc=358 mUarfcn=2959 mMcc=214 mMnc=03 mAlphaLong=Orange SP mAlphaShort=Orange SP mAdditionalPlmns={} mCsgInfo=null} voiceSpecificInfo=null dataSpecificInfo=android.telephony.DataSpecificRegistrationInfo :{ maxDataCalls = 16 isDcNrRestricted = false isNrAvailable = false isEnDcAvailable = false mLteAttachResultType = 0 mLteAttachExtraInfo = 0 null } nrState=**** rRplmn=21403 isUsingCarrierAggregation=false}], mNrFrequencyRange=0, mOperatorAlphaLongRaw=Orange, mOperatorAlphaShortRaw=Orange, mIsDataRoamingFromRegistration=true, mIsIwlanPreferred=false}

分段分析:

【SST】NetworkRegistrationInfo
【ServiceStateTracker】NetworkRegistrationInfo

如上三个NetworkRegistrationInfo,包含WLAN和WWAN两种transportType。

关注Emergency Call业务,需要Voice能力,故选取中间的状态进行分析。

  1. registrationState 的值为 HOME ,表示该设备已成功注册到本地运营商的网络,即该设备正在其所属的运营商的服务区域内。
  2. networkRegistrationState 的值为 ROAMING ,表示该设备正在漫游,但是由于accessNetworkTechnology 的值为 UMTS ,即设备使用的是 3G 网络,因此这种情况下也可以视为没有漫游。
  3. roamingType 值为NOT_ROAMING,说明非漫游。

日志:

NetworkRegistrationInfo{ domain=CS transportType=WWAN registrationState=HOME networkRegistrationState=ROAMING roamingType=NOT_ROAMING accessNetworkTechnology=UMTS rejectCause=0 emergencyEnabled=false availableServices=[VOICE,SMS,VIDEO] cellIdentity=CellIdentityWcdma:{ mLac=1134 mCid=149649449 mPsc=358 mUarfcn=2959 mMcc=214 mMnc=03 mAlphaLong=Orange SP mAlphaShort=Orange SP mAdditionalPlmns={} mCsgInfo=null} voiceSpecificInfo=VoiceSpecificRegistrationInfo { mCssSupported=false mRoamingIndicator=0 mSystemIsInPrl=0 mDefaultRoamingIndicator=0} dataSpecificInfo=null nrState=**** rRplmn=21403 isUsingCarrierAggregation=false}, 

专业名词:

  1. RPLMN(Registered Public Land Mobile Network)是指设备所连接的当前注册公共陆地移动网络。
  2. UMTS 是一种全球标准的第三代移动通信技术,可以在全球范围内实现漫游。

这篇关于【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/782883

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局