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. Android(安卓)JNI介绍
  2. Android:JNI
  3. Android(安卓)Power Management
  4. Android应用程序启动过程源代码分析
  5. android WebView总结
  6. Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
  7. Android里关于EventBus的使用
  8. Android—— 4.2 Vold挂载管理_VolumeManager (三)
  9. Android系统启动流程(四)Launcher启动过程与系统启动流程

随机推荐

  1. Android简单短信发送示例
  2. Android(安卓)Proguard 如何混淆package
  3. Android(安卓)ListView列表分组
  4. android字体闪烁动画(线程)
  5. Android关于SD卡中多层目录的创建
  6. Android(安卓)Localization
  7. Wakelock API详解
  8. android学习小结3
  9. Android(安卓)网络连接-重试机制-HttpReq
  10. 自定义控件5---TypedArray和AttributeSet