【Android 数据业务解析】nwTypeChanged引发的原因

android 系统数据业务---打开 2数据业务打开 DcTracker的onTrySetupData调用流程图如下, onTrySetupData方法如下, protected boolean onTrySetupData(String reason) { if (DBG) log("onTrySetupData: reason=" + reason); setupDataOnConnectableAp 阅读详情

本文主要分析由于nwTypeChanged引发的数据连接流程。

在DcTracker的handleMessage方法中,会由于nwTypeChanged原因来使得手机去尝试建立数据连接,调用setupDataOnConnectableApns方法。
// 当DcTracker接收到EVENT_DATA_RAT_CHANGED的消息时,会尝试建立数据连接,建立连接的原因是nwTypeChanged
case DctConstants.EVENT_DATA_RAT_CHANGED:
//May new Network allow setupData, so try it here
setupDataOnConnectableApns(Phone.REASON_NW_TYPE_CHANGED,
                           RetryFailures.ONLY_ON_CHANGE);
break;


DctConstants.EVENT_DATA_RAT_CHANGED消息的注册是在DcTracker的registerForAllEvents方法中,向ServiceStateTracker对象注册了消息。

//监听接入技术状态,执行setupDataOnConnectableApns方法
mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(this, DctConstants.EVENT_DATA_RAT_CHANGED, null);

在ServiceStateTracker中可以进行注册该消息,或者注销掉该消息。

public void registerForDataRegStateOrRatChanged(Handler h, int what, Object obj) {
    Registrant r = new Registrant(h, what, obj);
    mDataRegStateOrRatChangedRegistrants.add(r);
    notifyDataRegStateRilRadioTechnologyChanged();
}
public void unregisterForDataRegStateOrRatChanged(Handler h) {
    mDataRegStateOrRatChangedRegistrants.remove(h);
}

那么,DctConstants.EVENT_DATA_RAT_CHANGED的消息会由mDataRegStateOrRatChangedRegistrants来进行通知。
在ServiceStateTracker的notifyDataRegStateRilRadioTechnologyChanged方法中,进行了消息的通知:
protected void notifyDataRegStateRilRadioTechnologyChanged() {
    int rat = mSS.getRilDataRadioTechnology();
    int drs = mSS.getDataRegState();
    if (DBG) log("notifyDataRegStateRilRadioTechnologyChanged: drs=" + drs + " rat=" + rat);
    mPhoneBase.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
            ServiceState.rilRadioTechnologyToString(rat));
    mDataRegStateOrRatChangedRegistrants.notifyResult(new Pair<Integer, Integer>(drs, rat));
}

而notifyDataRegStateRilRadioTechnologyChanged的调用是在GsmServiceStateTracker的pollStateDone方法中。在hasDataRegStateChanged为真,或者hasRilDataRadioTechnologyChanged为真的情况下,会触发通知。

if (hasDataRegStateChanged || hasRilDataRadioTechnologyChanged) {
    notifyDataRegStateRilRadioTechnologyChanged();

    if (ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
            == mSS.getRilDataRadioTechnology()) {
        mPhone.notifyDataConnection(Phone.REASON_IWLAN_AVAILABLE);
    } else {
        mPhone.notifyDataConnection(null);
    }
}

上述两个布尔值的取值如下:

boolean hasDataRegStateChanged =
        mSS.getDataRegState() != mNewSS.getDataRegState();

boolean hasRilDataRadioTechnologyChanged =
        mSS.getRilDataRadioTechnology() != mNewSS.getRilDataRadioTechnology();


结论:即当网络返回的状态中发生了数据注册状态变化或者无线通信技术类型的变化时,DcTracker就会发起由nwTypeChanged引发的数据连接。


备赛电赛学习硬件篇(二):电源板电路设计 1、输入接口要准备各种接口,如2p端子,锂电池接口,typec等,提供多种电源供电方案2、输出接口3、自由拓展。 阅读详情

相关推荐

Transformer入门(一)——结构

Transformer入门介绍篇,分别介绍了Transformer的总体结构与每个模块的实现原理

yeen123的博客 9424

数据业务建立流程之DcTracker创建过程(原)

一、DcTracker介绍         DcTracker是Telephony框架中负责数据业务的核心(类似于GsmCallTracker是通话业务核心,GsmServiceStateTracker是网络CS业务的核心),所有对数据网络的请求(打开关闭数据开关、切换数据卡、修改APN参数等)都会发送到该处理中心来处理。本节所涉及的大部分代码也都在该对象中。下面我们先来看该对象的初始化

阿杜的专栏 1万+

Claude Skills:不是更聪明,而是更“像专家”的 Agent 养成方法

Claude Skills 不是在告诉 Agent“你能做什么”, 而是在约束它“你应该如何思考、如何判断、如何给结论”。

测试者家园 1293

android5.1.1 获取当前移动信号强度

TelephonyManager mTelephonyManager; mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); mTelephonyManager.listen(new PhoneStateListener(){ @O

Grindstone_Fos的博客 5460

source tree clone error:fatal remote error: Repository not found

source tree clone error:fatal remote error: Repository not found

Linda的前端开发路 3077

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 158

数据业务建立流程之发起网络连接过程。

转载自品略图书馆http://www.pinlue.com/article/2020/03/1513/2810027082342.html 经过前面这些过程,网络连接所需要的条件就全部准备就绪,接下来就是等待网络接入。 我们把网络接入过程简单分为三个阶段: 触发阶段 ----该阶段是由各种不同事件触发的,比如SIM载入完毕、PS域Attach成功、通话结束、APN改变等,该阶段的最...

yihuliunian的博客 603

锁定放大器

锁定放大器

qq_46757048的博客 4706

基于Android平台的APN加载流程分析

APN是GGSN的引用,被internal GPRS DNS转换为GGSN的IP地址。GGSN全称Gateway GPRS Support Node, 网关GPRS支持节点。对内:网络传输;(网络接入控制,分组数据的过滤)对外:路由器(路由选择和分组的转发,IP地址分配)为了访问网络,手机必须设置合适的APN参数。APN的英文全称是Access Point Name,全称接入点,是手机上网时必现配置的参数。APN决定了用户的手机通过哪种接入方式来访问什么样的网络。

四儿家的小祖宗的博客 3404

DLPFC.h5ad格式数据简便获取方式+STAGATE论文复现问题

简便获取DLPFC.h5ad格式的数据方式

apple_74057836的博客 2255

MIT 18.03 微分方程 ODE 学习笔记分享——目录

从B站上看到了MIT 微分方程的课程,觉得老爷子讲的真好! 其实微分方程对于工科来说相当重要,但是很多学习也仅把他放在高数里作为单独的一个章节来讲,这是远远不够的。所以对于同学们来说 ,一定要认真听讲,做好笔记! 以下是我的个人学习比较分享。有需要的同学可以做一个参考。 注:个人认为笔记的作用是用来回想起课堂所讲的内容(细节),所以我的笔记风格为以老师讲课思路为准,板书为辅。建议刚开始听这门课的同...

weixin_40664094的博客 2625

Telephony基础之DataCall业务(常规APN参数的创建)

与紧急APN不同,常规APN参数的创建是由监听器触发的。 其中有两个监听器可以触发APN的创建过程:1、SIM载入完毕;2、APN改变。 【当SIM载入完毕时】,将会触发onRecordsLoaded():     @Override     public void handleMessage (Message msg) {         if (VDBG) log("handleMessage...

cornerOfHeart的博客 1788

SAP 集成泛微 OA Open API 新建流程申请接口

《SAP ERP 与泛微 OA 的系统集成》系列文章。泛微 Open API 是基于 HTTPS 的 Restful 接口,上篇文章,我已经完成了调用业务接口之前的准备工作,这篇文章我以新建流程申请这个系统集成最重要的接口为例,讲解接口设计、泛微 API 调用的过程、遇到的问题、解决的办法。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 3552

Android 7.1开机之后APN的加载及拨号上网流程分析

1、前言 在前段时间的项目中遇到客户的设备出现APN断开的情况没有自动连接,后来折腾了一段时间解决了这个问题。现在用这篇博客记录一下APN的选择和连接流程。 2、名词解析 APN:APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。 对于手机用户来说,可以访问的外部网络类型有很多,例如:Internet、WAP网站、集团企业内部网络、行业内部专用网络。而不同的接入点所能访问的范围以及接入的方式是不同的,网络侧如何知道手机激活以后要访问哪个网络从而分配哪

秦逸轩的博客 7075

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

radio日志sim卡信号状态分析

2)搜索"< DATA_REGISTRATION_STATE"查看PS域注册状态,也就是有无数据,和CS类似,第一个字段表示驻网状态,第四个字段表示网络类型。对于PS,只有主卡才会驻网,副卡不会驻网,不必关注。1)搜索"< VOICE_REGISTRATION_STATE"查看CS域注册状态,也就是有无信号,第一个字段表示驻网状态,第四个字段表示网络类型,倒数第二个是拒绝入网原因。// 0表示无数据,5表示有数据且漫游状态,1表示有数据且没有漫游,出现1/5表示数据驻网成功(PS域驻网成功)...

bestwu0666的博客 1134

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

基于Android11的拨号流程分析

拨号分析也就是数据业务如何建立起来,本文档用于分析及总结拨号的流程,用于后面快速定位RIL拨号这块出现的问题。

teti3231052的博客 3569

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 系统数据业务---模式切换分析(下)

5.3 RIL_REQUEST_DATA_REGISTRATION_STATE 在GsmServiceStateTracker的构造方法中,注册了一些监听事件, mCi.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); mCi.registerForRadioStateChanged(this, EVENT_RADIO_STA

Jack的博客 3874

【私人备忘录】Android P 数据业务开启代码流程(一)

一、上层: 上层调用TelephonyManager.setDataEnabled(true) 二、Telephony Services: TelephonyManager.setDataEnabled(true) → PhoneInterfaceManager.setUserDataEnabled(phone.setUserDataEnabled) → GsmCdmaPhone.setUser...

llleahdizon的博客 2436

android 系统数据业务---模式切换分析(上)

5 setPreferredNetworkType详解 5.1 RIL处理 RIL.java中setPreferredNetworkType方法如下, @Override public void setPreferredNetworkType(int networkType , Message response) { RILRequest rr = RILRequest.obta

Jack的博客 4271

Android RILC 处理流程

Android电话系统框架 在android系统中rild运行在AP上,AP上的应用通过ril发送AT指令给BP,BP接收到信息后通过rild传送给AP。AP与BP之间有两种通信方式: 1.Solicited Response: AP向BP发起请求,BP给AP发送回复,该类型的AT指令及其回调函数以数组的形式存在Ril_commands.h文件中: {数组中的索引...

达帮主 4168

APN设置 --- 之一

5.2 设置默认APN Phone进程中的DcTracker构造方法如下, 1,调用父类DcTrackerBase的构造方法, super(p); DcTrackerBase的构造方法主要逻辑如下, 监听SIM卡的变化, mUiccController = UiccController.getInstance(); mUiccController.registerForIccChang

Jack的博客 7036

android 数据业务,四、 Android 数据业务APN参数的创建

前面在DcTracker初始化过程中注册了大量监听器,其中有两个监听器可以触发APN的创建过程:1、SIM载入完毕;2、APN改变。其中SIM载入完毕的注册是EVENT_RECORDS_LOADED事件,APN改变是注册了一个ApnChangeObserver类来监听。当SIM载入完毕时,将会触发onRecordsLoaded()private void onRecordsLoaded() {lo...

weixin_39573287的博客 381

开关VoLTE流程分析(二)

AT指令,暂未发现发送AT请求的frameworks接口,通过打印信息总结AT指令: AT+EIMSVOICE: Enable/Disable IMS Voice Capability +EIMSVOICE= : integer  0 disable IMS Voice capability 1 enable IMS Voice capability note:This c

meiliqiang的博客 1715

NXP imx8mp android11 ec20 4G模块调试通的log

记录一下4g模块调通的情况

u011557327的博客 1294

二、Android 数据链接的动态分析

经过前面这些过程,网络连接所需要的条件就全部准备就绪,接下来就是等待网络接入 把网络接入过程简单分为三个阶段 触发阶段 —-该阶段是由各种不同事件触发的,比如SIM载入完毕、PS域Attach成功、通话结束、APN改变等,该阶段的最终都是要调用setupDataOnConnectableApns()方法; 准备连接阶段 —-该阶段是指,在DcTracker收到建立连接的请求之后,需要进行一

夏菠 2479

Android 数据连接分析

把网络接入过程简单分为三个阶段  触发阶段  —-该阶段是由各种不同事件触发的,比如SIM载入完毕、PS域Attach成功、通话结束、APN改变等,该阶段的最终都是要调用setupDataOnConnectableApns()方法;  准备连接阶段  —-该阶段是指,在DcTracker收到建立连接的请求之后,需要进行一系列有效性检测,比如APN是否已经激活、PS是否已经就绪、用户是否打开

成功不必在我,而功力必不唐捐! 1553
上一篇: Dialog的不完全事件分发机制
下一篇: chrome jsonView插件安装
Sun_Jingjing
博客等级 码龄10年 1粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值