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张图片

更多相关文章

  1. C语言函数以及函数的使用
  2. Android P窗口机制之Window加载流程
  3. Android 实例子源代码文件下载地址380个合集
  4. Android JNI简单实例(android 调用C/C++代码)
  5. 【Android 系统开发】 Android 系统启动流程简介
  6. 【 Android '四大组件' 】篇 -- Activity 的 "启动流程"

随机推荐

  1. building android 问题
  2. Android获取包名、版本号、包名、meta-da
  3. android 全屏去掉底部虚拟导航栏
  4. android 通过 sharedpreferences 来缓存
  5. Android项目开发经验汇总
  6. Android(安卓)总结:自定义键盘实现原理和
  7. Android(安卓)获取手机信息
  8. Android(安卓)Studio Could not find met
  9. Android(安卓)常用文件路径
  10. Android: 可以横向拖动的TabHost