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


所调用的框架图:

 

 

 

 

更多相关文章

  1. C语言函数以及函数的使用
  2. 我的Android进阶之旅------>Android电话实例
  3. Android学习札记15:对Android中View绘制流程的一些理解
  4. android 虚拟按键源码流程分析
  5. Android横竖屏切换实例总结
  6. Android 列表选择框 Spinner详解及实例
  7. AndroidRuntime 流程

随机推荐

  1. 在Navicat 中设置 SQL 格式的方法
  2. mysql 去除重复数据
  3. mysql数据库大规模数据读写并行时导致的
  4. 牛客网数据库SQL实战(1-5)
  5. SSAS中用于层次结构的数据驱动安全性
  6. 在php中连接mysql列值
  7. 如何在大描述值中找到字符串
  8. sqlserver,mysql,oracle通用的模拟和改进
  9. Mysql 修改字段类型
  10. 写SQL语句,如何找到部分字段内容一样的两