【笔记】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

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l