Android6.0 Telephony Frameworks之数据业务建立流程_Xsinwa的博客-程序员秘密

技术标签: 数据  android  框架  Android  

数据业务(数据网络,即SIM卡上网)的建立需满足两个条件:1.选择并激活合适的APN;2.PS域已处于Attached状态。默认状态下,手机开机后就会发起PS附着的信令给网络。而所有数据网络的请求(打开关闭数据开关、切换数据卡、修改APN等)都必须经过DcTacker.java处理,其是Telephony框架中负责数据业务的核心。

一、数据业务建立之准备知识

1.      DcTracker

DcTracker对象在Phone对象创建过程中被创建,继承于DcTrackerBase,而DcTackerBase继承于Handler,主要完成以下任务:

1.               update():onUpdateIcc更新SIM卡状态;getDataEnabled()获取数据流量开关状态;

2.               初始化各种监听器:registerForAllEvents(),并完成相应事件处理,如PS Attached事件EVENT_DATA_CONNECTION_ATTACHED和网络技术(LTE/GSM/UMTS)监听事件EVENT_DATA_RAT_CHANGED;

3.               初始化一些基本的APN参数:initApnContexts();

 

图1 DcTacker构造函数源码

2.      APN创建

APN的创建主要有两种情况触发:①SIM卡载入完毕(onRecordsLoaded());②APN改变(onApnChanged())。上述两个方法均是通过调用createAllApnList()实现APN的创建。

 

图2 APN创建

二、数据业务建立流程

framworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection

数据业务的建立有多种原因触发,如漫游、通话结束、APN改变、SIM卡载入完毕和网络模式改变以及PS Attached。本文将就常见的PS Attached进行分析。在DcTacker.java 类中的registerForAllEvents()方法中对PS Attached事件进行注册监听,代码如下:

 

Protected void registerForAllEvents(){
     mPhone.getServiceStateTracker.registerForDataConnectionAttached(this,DctConstants.EVENT_DATA_ATTACHED,null);
}

 

 

 

 

 

因此当PS域Attach成功之后,将会收到EVENT_DATA_CONNECTION_ATTACHED消息:

 

图3 GsmServiceStateTracker注册dataconnection attached事件

 

图4 EVENT_DATA_ATTACHED消息处理

 

图5 onDataConnectionAttached方法

onDataConnectionAttached方法调用setupDataOnConnectableApns(),后续步骤详见http://note.youdao.com/share/?id=e37a4204ab15f8be458fad2339aa914c&type=note#/

整体流程如下:

 

 

由于不同事件,DcTracker交互对象不同,所用图中用空模块表示,且不同事件的处理流程也不尽相同,图中仅列出相同部分。而不同事件的DcTracker交互对象如下表所示。

 

 

三、数据业务建立上层触发之数据开关

 

此部分具体代码流程详见http://note.youdao.com/share/?id=71132d434ac52fe9218f8a88ea62e0d5&type=note#/,本文仅以log的形式加以说明。上层Apk打开关闭数据开关的动作具体表现在log如下:

1.      main_log: D TelephonyManager: setDataEnabled: enabled=true 关键词:setDataEnabled

2.      radio_log:D RILJ    : [3995]>RIL_REQUEST_SET_DATA_ON_TO_MD: 1 [SUB0]  关键词:RIL_REQUEST_SET_DATA_ON_TO_MD

D AT      : AT> AT+EDSS=1  关键词:EDSS,其中1表示数据开关打开,0表示数据开关turned off

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012864297/article/details/53423379

智能推荐

ios之scrollview嵌套问题解决_LVXIANGAN的博客-程序员秘密

苹果官方文档里面提过,最好不要嵌套scrollView,特别提过UITableView和UIWebView,因为在滑动时,无法知道到底是希望superScrollView滑动还是subScrollView滑动,一旦出现这种情况,情况就出乎我们的意料。 但是有时候我们又需要嵌套,怎么做呢,就需要我们去决定,某个时候应该是那个scrollView可以拖动,那个不可以拖动,因为UIScrollV

某个程序员的工作记录_zhanglinlove的博客-程序员秘密

一直工作都没有过记录,经历了什么,时间长了就都记忆模糊了,经验指的就是记忆,忘了就相当于白做了。决定把工作都记录下来,作为以后的参考。11月18日新入职了一家公司,公司的平台是做小游戏平台的,我是做后台开发的。主要是统计会员数据(用户的活跃数量、用户任务、用户排名、评论、用户金币、提现金额),暂时只知道这些。分配给我的任务是将验证码换成阿里云的短信验证码,提现的时候增加将账号绑定手机号如果已...

初识ObjectiveSql(上)_风火大地的博客-程序员秘密

事情是这样的,前阵子跟同事讨论关于ORM的事,发现我们熟悉的各自领域.Net和Java之间关于ORM有分歧。他现在用的是.Net 的 ef core框架,我用的是Java的Mybatis的扩展框架tkmybatis和mybatis-plus。他的观点是认为2021年了,不要再手撸sql了,全部交给框架,只在代码里实现逻辑即可。然而Mybatis框架严格意义来说,不能算ORM框架,它只是个半自动的。Java的ORM框架应该是hibernate或者是jpa,但是这两个框架不知道出于什么原因(待查),在我最

数值分析——二分法和牛顿迭代(Bisection Method & Newton‘s Method)_二分法公式_怀帝阍而不见的博客-程序员秘密

本系列整理自博主21年秋季学期本科课程 数值分析I 的编程作业,内容相对基础,参考书: David Kincaid, Ward Cheney - Numerical Analysis Mathematics of Scientific Computing (2002, Americal Mathematical Society)算法用途一般用于找非线性方程的数值解,即寻找x使得目标函数f(x)=0二分法(1)算法描述要求f(x)在区间[a,b]上连续,且f(a)f(b) < 0

phalcon 安装_phalcon安装_鲨鱼辣椒123456的博客-程序员秘密

按照这个教程进行https://blog.csdn.net/fangkang7/article/details/118283850出现问题PHP Warning: Cannot load module ‘phalcon’ because required module ‘psr’ is n没有psr 扩展去这个位置下载 7。2 版本https://windows.php.net/downloads/pecl/releases/psr/1.0.1/配置(有先后顺序)按照步骤完成...

《数字IC: Verilog》4.4 FIFO 设计_fifo为空还在读会有什么影响_Think.In.Hardware的博客-程序员秘密

FIFO(First In First Out)是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出(后进后出)。其实,多位宽数据的异步传输问题,无论是从快时钟到慢时钟域,还是从慢时钟到快时钟域,都可以使用 FIFO 处理。FIFO 原理◆工作流程复位之后,在写时钟和状态信号的控制下,数据写入 FIFO 中。RAM 的写地址从 0 开始,每写一次数据写地址指针加一,指向下一个存储单元。当 FIFO 写满后,数据将不能再写入,否则数据会因覆盖而丢失。FIFO 数据为非空、或满状态时,在读时

随便推点

MTI_shitfly的博客-程序员秘密

上海华东师范大学(压分严重)英语笔译(055101) 2018 全日制:40 00 (全日制)不区分研究方向 ①101思想政治理论②211翻译硕士英语③357英语翻译基础④448汉语写作与百科知识 初试范围 教育部统一命题,参见教育部考试中心编制的考试大纲。学校命题,参见教育部有关专业学位教育指导委员会发布的考试内容范围(指导意见)学校命题,参见教育部有关...

JAVA 通过MongoTemplate管理MongoDB的统计实现_今天的砖头很烫手的博客-程序员秘密

根据投保单号(applNo),组织层次代码(levelCode),险种代码(polCode) 查询被保人信息【GrpInsured】组织查询条件://1、组织查询条件:Criteria c=Criteria.where("applNo").is("").and("levelCode").is("");//org.springframework.data.mongodb.core.aggr...

Lenovo Yoga 11s EFI+GPT Ubuntu 13.04 +预装Windows 8 双系统完美安装_yoga11s恢复预装系统_ztl_803的博客-程序员秘密

首先,不得不说,在Yoga11s 上这么折腾必须是一件相当蛋疼的事情,而且我相信,和本人一样蛋疼和正在备受煎熬的主也不少,为此,将这几天折腾的心得与众苦主分享一二,祝各位早日修仙成功!        由于Yoga 11s 预装的正版Win 8是基于EFI的,因此Ubuntu版本的选择最好是13.04,这样就可以不借助任何第三方软件而实现EFI双系统的完美安装。当然,如果你已经将Yoga 11s

MySQL1000万条数据分页查询优化_1000万的db数据分页怎么处理_一颗向上的草莓的博客-程序员秘密

这种问题的解决就是通过构建一个新的小表,以小表来join驱动大表;或者构建一个子查询语句,用exist,in做查询;或者注意索引下推和索引覆盖的使用。概述今天一个朋友问我一个问题,说MySQL很多数据查询怎么优化。我就直接说了个分页查询就行了啊,查询字段加索引。然而结果并没有我想象得那么简单,他分页查询直接把服务查崩了。原来他们数据量已经有好几百万了。你可能会问不就几百万数据吗,分页只查询10条怎么可能查询会很慢。后面我会模拟1000万条数据分页查询。准备工作1.新建一个测试库,我这里就叫

CSRF跨站请求伪造靶场实战_筱戈的博客-程序员秘密

csrf跨站伪造请求的原理是:1.用户的cookie短时间内不会过期2.网站使用javascript发起网络请求3.浏览器的信任机制使得浏览器会完全信任用户访问的站点,不会阻止跨站访问请求csrf的成功条件:1.用户要登录目标站点2.目标用户访问攻击者的csrf靶场这次的靶场为dedecms,可以本地搭建一个同版本的cms查看是否存在csrf漏洞。1.搭建好本地站点后进入后台发现存在文件管理功能2.使用burpsuite抓包并右键选择转换为csrfpoc3.测试poc是否可用成

邹晓辉公开提出自然语言理解的形式化双重路径与第六代编程语言及其三类双语协同计算平台_geneculture的博客-程序员秘密

图1 强调自然语言理解的形式化双重路径是建立在具有异曲同工之妙的直接和间接两条形式化路径的基础之上的图2  请注意六代编程语言发展的六个特征凸显了第五代和第六代务必结合方可形成协同智能计算系统的开发平台回顾图灵奖(Turing Award)获得者们的贡献,可以发现:.... http://blog.sciencenet.cn/blog-94143-589630.html

推荐文章

热门文章

相关标签