Android6.0 Telephony Frameworks之数据业务建立流程

数据业务(数据网络,即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();

Android6.0 Telephony Frameworks之数据业务建立流程_第1张图片

 

图1 DcTacker构造函数源码

2.      APN创建

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

Android6.0 Telephony Frameworks之数据业务建立流程_第2张图片

 

图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消息:

Android6.0 Telephony Frameworks之数据业务建立流程_第3张图片

 

图3 GsmServiceStateTracker注册dataconnection attached事件

Android6.0 Telephony Frameworks之数据业务建立流程_第4张图片

 

图4 EVENT_DATA_ATTACHED消息处理

Android6.0 Telephony Frameworks之数据业务建立流程_第5张图片

 

图5 onDataConnectionAttached方法

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

整体流程如下:

Android6.0 Telephony Frameworks之数据业务建立流程_第6张图片

 

 

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

Android6.0 Telephony Frameworks之数据业务建立流程_第7张图片

 

 

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

 

此部分具体代码流程详见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

你可能感兴趣的:(Android)