android 网络拨号流程:

frameworks\base\services\java\com\android\server\ ConnectivityService.java
->[MyHandler ->handleMessage ->case EVENT_SET_MOBILE_DATA ->handleSetMobileData]
frameworks\base\services\java\com\android\server\ ConnectivityService.java
->[mNetTrackers[ConnectivityManager.TYPE_MOBILE].reconnect()]
frameworks/base/core/java/android/net/MobileDataStateTracker.java
extends NetworkStateTracker
->[reconnect()]
frameworks/base/core/java/android/net/MobileDataStateTracker.java
->[setEnableApn]

..\base\telephony\java\com\android\internal\telephony\ITelephony.java
->[enableApnType]
packages\apps\phone\src\com\android\phone\
PhoneInterfaceManager.java (extends ITelephony.Stub ) 实现
->[enableApnType-> mPhone.enableApnType(type)]
{那么这个mPhone是哪里来的,通过源代码我们发现在PhoneInterfaceManger的构造函数传进去的。在PhoneApp.java 的OnCreate 函数里创建了一个PhoneInterfaceManger对象, PhoneFactory.makeDefaultPhones(this);
phone = PhoneFactory.getDefaultPhone(); 也就是说这里的Phone要么是CDMAPhone 的实例要么是GSMPhone 的实例,因为CDMAPhone extends PhoneBase,GSMPhone extends PhoneBase.}
frameworks\base\telephony\java\com\android\internal\telephony\
PhoneBase.java extends Handler implements Phone
->[enableApnType]
frameworks\base\telephony\java\com\android\internal\telephony\
DataConnectionTracker.java
->[enableApnType() -> setEnabled() -> handleMessage -> case EVENT_ENABLE_NEW_APN -> onEnableApn()]
{这里稍微解释下, CDMAPhone ,GSMPhone 都是继承 PhoneBase. 而DataConnectionTracker 是PhoneBase 的一个成员字段,该对象的初始化分别是在CDMAPhone ,GSMPhone 类里,对应CdmaDataConnectionTracker, GsmDataConnectionTracker ,因为此二类分别继承DataConnectionTracker,所以具体是调用那个类的函数,要根据前面传进的是CDMAPhone 或者GSMPhone ,这个流程以GSMPhone 示例。}
frameworks\base\telephony\java\com\android\internal\telephony\gsm\
GsmDataConnectionTracker .java extends DataConnectionTracker
->[onEnableNewApn() -> cleanUpConnection() -> conn.disconnect(obtainMessage(EVENT_DISCONNECT_DONE, reason))]

frameworks\base\telephony\java\com\android\internal\telephony\
DataConnectionTracker.java
->[handleMessage ->case EVENT_DISCONNECT_DONE -> onDisconnectDone()]
frameworks\base\telephony\java\com\android\internal\telephony\gsm\
GsmDataConnectionTracker.java
->[onDisconnectDone() -> trySetupData(reason) -> setupData(reason)]
frameworks\base\telephony\java\com\android\internal\telephony\
DataConnection.java
->[processMessage -> case EVENT_CONNECT -> onConnect(cp)]

frameworks\base\telephony\java\com\android\internal\telephony\gsm\
GsmDataConnection .java
->[phone.mCM.setupDataCall()]
{phone.mCM 类型为CommandsInterface,也是根据CMDAPhone 或者GSMPhone 决定的,那么两者都是RIL 的实例,RIL implements CommandsInterface , 其实是根据RIL的构造函数,根据参数int networkMode 来决定。 注意:如果是Sip 就另当别论了,那么phone.mCM 就是通过SipPhoneBase 构造函数传给父类PhoneBase的构造函数,参数CommandsInterface,其实现 SipCommandInterface ,因为SipPhoneBase implements Phone, SipCommandInterface implements CommandsInterface }
RIL
->[setupDataCall()]
到这里, java层的pppd请求就通过RIL发到C层了。

所调用的框架图:

android 拨号上网流程相关推荐

  1. Android 4G上网流程分析

    手机一般会提供两种上网方式:Wifi或者3G/4G上网,Wifi上网其实就是利用网卡通过以太网上网:3G/4G则是通过基带,利用蜂窝网络进行上网,之前已经简单的阐述了Wifi上网跟3G上网的区别,本文 ...

  2. PPPOE拨号上网流程及密码窃取具体实现

    楼主学生党一枚,最近研究netkeeper有些许心得. 关于netkeeper是调用windows的rasdial来进行上网的东西,网上已经有一大堆,我就不赘述了. 本文主要讲解rasdial的部分核 ...

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

    1.前言 在前段时间的项目中遇到客户的设备出现APN断开的情况没有自动连接,后来折腾了一段时间解决了这个问题.现在用这篇博客记录一下APN的选择和连接流程. 2.名词解析 APN:APN指一种网络接入 ...

  4. Android 7.0 APN 拨号上网流程分析

    1.前言 在前段时间的项目中遇到客户的设备出现APN断开的情况没有自动连接,后来折腾了一段时间解决了这个问题.现在用这篇博客记录一下APN的选择和连接流程. 2.名词解析 APN:APN指一种网络接入 ...

  5. 华为LTE 模块AT命令拨号上网流程

    一.模块初始化 AT+CPIN?   +CPIN: READY //  查询  SIM  卡是否识别  OK  AT+CSQ  +CSQ: 27,99 // 查询信号强度  OK  AT^SYSINF ...

  6. 华为LTE 模块AT 命令拨号上网流程

  7. AT调试及拨号上网指令

    一.3GPP 指令(27.007)    描述 ATI    显示产品ID ATE    设置命令回显模式 AT+CGMI    请求厂商ID AT+CGMM    请求厂商模型标识 AT+CGMR  ...

  8. 实现4G模块EC20在树莓派系统下的PPP拨号上网

    目录 PPP协议 PPP通信建立 PPP认证方式 ppp协议栈 pppd数据传输 Pppd 控制协议数据流程 Linux中的PPP实现 安装PPP 方法一:源码安装 方法二: 直接安装 PPP拨号上网 ...

  9. 4G模块加网流程_4G拨号上网相关知识

    随着物联网技术的广泛应用,移动端联网变得越来越普遍.这里我们一起分享4G网络相关知识,以高通平台 data call 管理库dsi_netctrl,移远EC20通信模组进行讲解. 1.首先介绍一下相关 ...

最新文章

  1. HBase性能优化方法总结(2):表的设计
  2. Nginx的root和alias指令
  3. 纯CSS实现侧边栏/分栏高度自动相等
  4. 荣耀5G手机加速追赶:最快将于下半年登场
  5. 计算机配件的真假辨伪,专家教你辨真伪 “火眼金睛”辨真假配件
  6. 计算机类实训室建设公司,计算机专业实训室建设方案修改
  7. 论文Real-Time Lane and Obstacle Detection on the global System
  8. ubuntu命令行打开vscode-insider_系统小技巧:迁移Wubi安装的ubuntu到Windows 10
  9. 有限差分法与有限单元法的区别
  10. Sublime Text 安装中文、英文字体
  11. 欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫(Python无所不能爬)
  12. 解决全网 99的视频下载问题
  13. Matlab 划分网格,三维曲面,网格划分好之后还需要提取网格上的每个点的位置坐标,之后需要用这些点的坐标进行运算。望各位大佬解惑,感激不尽
  14. 史上超级详细:银行外包java面试题目
  15. Feedback from Microsoft
  16. 单词数(HDU 2072)
  17. 数字电视标准ATSC,DVB的比较
  18. python中temp的用法_python temp是什么
  19. concurrent.futures模块使用
  20. 神探夏洛克 Sherlock: The Abominable Bride (2016)

热门文章

  1. android 短信自动转发功能
  2. 如何查看PHP得版本?
  3. 【SemiDrive源码分析】【Yocto源码分析】07 - core-image-base-x9h_ref_serdes.rootfs.ext4 文件系统是如何生成的
  4. 关于js函数里面的嵌套函数
  5. Android FaceBook sdk 登录接入
  6. sql删除用逗号分隔字段中的某一个值
  7. 左支座零件的机械加工工艺规程及工艺装备设计(设计说明书+CAD图纸+任务书+工序卡+过程卡+文献+翻译)
  8. w3school 在线教程
  9. matlab 局部变量和全局变量,C++局部变量和全局变量(详解版)
  10. 推荐系统快速开发--豆瓣电影推荐系统的快速实战开发(一)