惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
T
The Blog of Author Tim Ferriss
H
Help Net Security
博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
博客园 - 聂微东
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
B
Blog
Engineering at Meta
Engineering at Meta
V
V2EX
Hugging Face - Blog
Hugging Face - Blog

博客园 - 蔡清华

数据库中查询的各种连接(左连接,右连接,全连接,内连接,交叉连接,自连接) Android RenderScript 的使用基础篇 Android应用启动后自动创建桌面快捷方式 Android API教程:人脸检测(Face Detect) Android应用中通过AIDL机制实现进程间的通讯实例 Android开发:如何实现TCP和UDP传输 用户授权认证过程 Android应用自动更新功能的代码实现 Android蓝牙开发浅析 网络通信的中文乱码问题 (转)android中 检查网络连接状态的变化,无网络时跳转到设置界面 Android开发之OpenGL+ES教程 android 示例源码 android 图片处理 Android应用如何实现换主题功能 android 开发环境搭建 Android 之 内存管理 Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 Android_launcher的源码详细分析
android 网络拨号流程
蔡清华 · 2011-08-10 · via 博客园 - 蔡清华

Posted on 2011-08-10 18:15  蔡清华  阅读(5743)  评论()    收藏  举报

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层了。

所调用的框架图: