Android 手机上网实现机制
Android 网络整体架构
Android 网络中,在底层实现两个虚拟串口:
1、Command 命令通道:建立或断开网络建立
2、Data 数据通道:基于TCP/IP 网络通信协议的数据传输
DataConnection 在Telephony Frameworks 层中用来管理手机上网连接
Android 最大支持9个数据连接类型,但同一时刻仅有一个是有效的;
DataConnection 继承 StateMachine 类(State设计模式)的抽象类,其子类 GsmDataConnection 和 CdmaDataConnection;
定义了6个内部类:
DcDefaultState 默认状态定义,作为其他5个状态对象的父对象
DcInactiveState 不活动的状态定义,作为初始化状态,在不使用、断开数据连接、数据连接异常时回到此状态
DcActivatingState 正在激活的状态定义
DcActiveState 活动中的状态定义,连接网络成功
DcDisconnectingState 正在断开的状态定义
DcDisconnectionErrorCreatingConnection 断开失败并且正在创建的状态定义,连接网络失败
这些内部类都有enter、exit 和 processMessage 三个重要方法
enter :在状态转换时,进入此状态的操作
exit :在状态转换时,退出此状态的操作
processMessage :根据Handler 消息类型进入不同的分支进行处理
DataConnection 类关键属性
ApnSetting mApnSetting APN 配置信息
PhoneBase phone Phone对象
LinkProperties mLinkProperties 网络连接的基本信息
HashMap<Integer, FailCause> sErrorCodeToFailCauseMap 记录所以数据连接失败原因
FailCause lastFailCause 记录最后一次数据连接失败原因
DcXXXState mXXXState 数据连接的6中状态
DataConnection 抽象类关键方法
StateMachine 状态机,实现了State 设计模式的应用
State 设计模式将对象的状态封装成一个对象,在不同状态下,同样的调用执行不同的操作;
Context 上下文维护对个State 子类的实例,每个实例实现该状态的操作;Context只需固定调用State.Handle方法,交由ConcreteState对象的Handle处理;
StateMachine 类共有6个内部类:
ProcessedMessageInfo 已处理的消息实体类
ProcessedMessages 已处理的消息类
SmHandler 消息处理核心类,负责Handler 消息的发生和接收用来管理和更新State对象
HaltingState 关闭的状态类
QuittingState 正在退出的状态类
StateInfo 状态实体类型
StateMachine 运行过程:
addState 增加管理的状态对象
setInitialState 设置状态的初始化对象
start 开始运行状态机
addState 增加管理的状态对象,这些状态对象之间存在着树状关系,一个State对象不会处理的消息交由父节点处理,这是职责链设计模式
StateInfo addState(State state, State parent)
SmHandler 内部类作为自定义的Handler 消息处理对象
private DataConnection(PhoneBasephone, Stringname, intid, 419 DcTrackerBase dct, DcTesterFailBringUpAll failBringUpAll, 420 DcController dcc) { 441 442 addState(mDefaultState); 443 addState(mInactiveState, mDefaultState); 444 addState(mActivatingState, mDefaultState); 445 addState(mRetryingState, mDefaultState); 446 addState(mActiveState, mDefaultState); 447 addState(mDisconnectingState, mDefaultState); 448 addState(mDisconnectingErrorCreatingConnection, mDefaultState); 449 setInitialState(mInactiveState); //设置初始化的State对象 450 451 mApnContexts = new ArrayList<ApnContext>(); 452 if (DBG) log("DataConnection constructor X"); 453 }
start() 启动方法的调用则是在子类GSMDataconnection和CDMADataconnection 类完成
APN (Access Point Name) 是通过手机上网必现配置的一个参数,决定手机通过哪种接入方式访问网络;
启动手机后,所以的APN 配置信息都会保存在telephony.db 的SQLite 的数据库表名未carriers 的表中;
adb pull /data/data/com.android.providers.telephony/databases/telephony.db
apn APN 接入点,比如中国移动有两个接入点:cmwap 和 cmnet
Android 支持的 APN 类型,最多支持5种 APN 类型:
default 默认数据类型,即浏览器、Email等手机普通上网数据连接
2、进入Call Setting 模块设置 APN 配置信息
配置 APN 信息,是修改 $workdir/development/data/etc/apns-conf.xml 配置文件
adb shell netcfg 查看网络基本信息,如网卡名称、状态、IP地址、Mac地址
2、SIM 卡加载完成后,设置创建DataConnection 数据连接
initApnContextAndDataConnection 获取 defaultEnable 和 networkConfigStrings 参数
networkConfigStrings 方法在 frameworks/base/core/res/res/values/configs.xml 配置文件中定义
onSetDependencyMet ,applyNewState 更新数据连接的状态;
1、createAllApnList 创建 ApnSetting (APN 配置信息的实体对象)对象列表
2、notifyOffApnsOfAvailability 发出数据连接变化的消息通知
3、setupDataOnReadyApns 创建和激活DataConnection 数据连接
EVENT_DATA_SETUP_COMPLETE 消息创建,调用bringUp 激活当前数据连接;
创建EVENT_CONNECT,调用父类StateMachine的sendMessage方法,继而调用mSmHandler.sendMessage;
设置初始状态InactiveState,调用内部processMessage,继而调用onConnect 和 transitionTo
Android 手机上网实现机制相关推荐
- Android手机上网实现机制
本章介绍DataConnectionTracker对DataConnection手机上网数据连接的管理机制和流程. 一.Android网络整体结构 流程结构图如下: Android网络中,在底层实现了 ...
- 电脑通过android手机上网 .
方案一 转自:http://blog.csdn.net/lastsweetop/article/details/7257546 话说没网络怎么能行啊,要是断网了怎么办,用android手机可以轻松上网 ...
- Android手机上网、彩信APN设置
Android手机上网.彩信APN设置 Godaddy最新域名优惠码 - 帅哥推荐博客主机 - linost圣诞促销返款 - iPhone4销售状态查询 前几天师弟跑来问我G2(Magic)怎么 ...
- 国外android手机 上网,Android手机通过电脑上网的几种方法
本文定位:没有wifi,想让手机通过电脑的有线连接上网. android手机可以通过wifi上网,这个很好.可当没有wifi的时候怎么上啊,3G--->流量受限,看视频很不划算! 我这里总结了几 ...
- linux安卓usb网络,[原创]在多种系统下通过USB连接android手机上网
基于三种系统:linux (for raspberry pi) windows 7 windows xp 首先,讲一下关于手机,从功能上分为两种: 第一:把手机当成无线网卡,手机连接了无线网络后,通过 ...
- Android手机上网必备:UC浏览器
强大的网络功能作为未来智能手机发展的一大趋势,在android平台上已经有了显著地体 现.浏览器最为手机上网的第一入口,其作用当然是不言自明. UC浏览器作为国内手机应用服务提供商优势科技公司的主打产 ...
- android 手机屏幕旋转机制与使用说明
android 屏幕旋转机制与使用说明 一 Overview 在开发android应用的时候,有可能需要让应用程序随着系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除此之外 ...
- android 动态修改dns,如何修改android手机上网DNS
由于我手机使用官方android play市场进行程序管理,从国内访问总电信提供的DNS总是劫持,所以需要使用自己额外设置DNS,关于DNS可以查看能正常从国内访问google服务的DNS doc,我 ...
- 如何修改android手机上网DNS
http://safe.114dns.com/ (2013-6-27) 作者: 李海鑫更新时间: 6/28/2013 03:13:00 下午编辑文章1 Comment关键字: android , ...
最新文章
- kotlin ++ --_顺便说一句-探索Kotlin代表团
- linux里引号注意点
- Java库可以软件著作权,(最新整理)软件著作权-源代码范本
- github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库
- matlab求傅里叶级数展开式_傅里叶级数:从向量的角度看函数
- pythongui界面复选框数值选择并求和_如何使用Python从图像中分离复选框按钮和复......
- 多云架构落地设计和实施方案【华为云分享】
- 网易云音乐工程师,亲自揭晓消息队列改造之路! | 技术头条
- 中缀表达式转换为后缀表达式算法
- Ubuntu20安装gcc6.3.0
- 为什么Audition cc2017扫描不了电音插件,你需要这个软件
- java雪崩_缓存穿透和雪崩
- ubuntu搭建dns服务器
- 你每天应该吃多少水果?
- 秦令令:移动营销跨越之年
- html中repeat的作用,深入探究CSS repeat()函数知识及用法
- 安全系列之——数据传输的完整性、私密性、源认证、不可否认性
- 心里窝火无语的图片_窝火的心情说说图片
- YED-M724嵌入式4G Cat1 核心板介绍
- 涨知识|最新十种深度学习算法要点及代码解析「精华」
热门文章
- Hive教程(一)---hive入门
- DedeCms织梦 tag标签静态化-教程
- Arduino单片机(五).基于OpenWrt模块的无线视频遥控小车设计
- 【经典】CSS技巧教程资源大全
- 1219 | 中国ICT企业家大会,我们不见不散~
- 计算机组织有CPU,计算机组织与结构 复习题 练习-cpu and memory(3页)-原创力文档...
- [maven报错]mvn clean install报错BUILD FAILURE
- 常见网络故障排错思路
- 利用Snippet快捷键在TeXpad上快速初始化中文环境的LaTeX模板
- CANoe 11.xx 快速入门教学