android 拨号上网流程

news/2025/3/1 20:11:09/

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


所调用的框架图:

 

 

 

 


http://www.ppmy.cn/news/526465.html

相关文章

通过电话拨号上网的家用计算机,拨号上网需计算机、电话线、帐号和()

相关题目与解析 使用电话线拨号上网的计算机必须配备(__)。A.网卡B.电话机C.调制解调器D.集线器 拨号上网需要准备的设备主要有()。A.计算机B.调制解调器C.电话线D.耳机 计算机和因特网的连接方式包括()。A、通过普通电话线拨号上网B、通过ISDN线路拨号上网C、宽带ADSL ●通过拨…

拨号上网和宽带区别

连接方式和带宽不一样: 拨号是用电话线,带宽14kbps-56kbps(Modem不同速度不同),而宽带用网线连到Adsl Modem,再连到电话线,须向营运商申请,带宽1-3Mbps都有,带宽大的速度…

拨号上网

电话拨号,上网的数据是调制在语音频段上的,局端是接入服务器。也就是说相当于电脑拨打了一个电话到接入服务器,如果网络一直连接,这个电话就不能挂断。由于语音带宽的限制,此方式上网的最大速率是56kbps左右&#xff0…

PPPOE拨号上网

因为没有真正的运营上账号和密码,这里就临时搭建测试 pppoe服务端配置 [Internet]ip pool pppoe 创建地址池 [Internet-ip-pool-pppoe]network 123.1.1.0 mask 24 配置IP地址段 [Internet-ip-pool-pppoe]dns-list 114.114.114.114 配置DNS [Internet-ip-pool-pp…

如何建立拨号上网连接

建立拨号上网连接是上网的第一步骤,如何正确地设置拨号连接是您能否上网的前提,下面将向你介绍建立拨号连接的方法。一、 WindowsXP/2003操作系统: 如果你使用的是WindowsXP/2003操作系统,可以直接在网上邻居中新建网络连接…

使用手机拨号上网

今天呢!我才发现自己的电,电脑有蓝牙功能,而且才知道现在可以用手机连接电脑拨号上网,我就去查了一些资料,自己去研究了下子,觉得还行。下面就是步骤: 第一: 下载手机驱动 大家都知道…

实现拨号上网

实现拨号上网     本例知识要点:   1. 远程访问服务(RAS)简介   远程访问服务(Remote Access Service 简称RAS)是Windows 操作系统提供的系统服务之一,通过电话线可以使单独的计算机接入…

拨号上网和宽带上网的区别分析

不少用户在使用电脑连接网络时,会遇到拨号上网与宽带上网。这两者有什么区别呢?下面我们就来一起看看详细的内容。 拨号上网和宽带上网的区别 研究两者的本质,实际并没有太多的区别,它们都是接入网络(Access Network&a…