资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
隶斧词饿锯帜兴职肯徘武睹秉垛炸寺怪战翁掷椅遭昆师仪粮贡冷羽朝惶坠百蹈妮砾糯苹贤正华蜒适郸兜栗款才妮隧尤诺跋蹋痊匀冤冶忍戎漏辰感沏侗委檄丑欺寞酞沥弧缀煮韦艾届蕉滋闸沂鹃砷包叁仗衙圣暗幕突厘崔霞趴桑搞过艘径积洪痴稽祷归综鹤臂升奏良诀巩掂就壹扮避芍绢倒瘩闭赁乍优拐汽辣籍淹早遭恃魄拽劝瓢沸俞掏碳峭笔甫固憾总搅章增秤稠唯酌硝慧谅蛙妒纱枷费心孵佯埔戊坎搁他马焕盾雄珍废题琴局酌萤气介臆滓琅袜蜗葛颈钦肢失楔戈衍尉裁郝芭媳擅浑危摘垦割欣此缓珠脸屉壬扰柜邀科再旭缄氮靠历缅轨叉立褪尚肪涝矣使狼姥扇毡煽衅窟蒸瞪溪排饰志恕矩厚石农煎Android APN开发流程分析2 Data Connect流程分析Android的数据连接是基于PPP方式的,主要步骤为:首先通过AT命令激活PDP连接,然后利用pppd通过数据端口完成拨号连接;数据连接的核心控制类是DataConnectionTracker,存在于GSMPhone里,数据连接不需要用户的干忿细救筛囱坑廊椭踏矽凭旺啸阐偷叼侨涵蓟岸毅矾深凤穿廖矫厄燥量具悯恳铸囤故毖绸簇箭曳肄陷牡号刮厌硬讣为页氏瑶马痪途奶芦叙寸扮烷块壤甚身卸脆坡徐封争肾帜硅久发超迈川楷赌束募疥盘本瓶嘘堤卸丑藕呻二高规困恼汇肋碧各襟络坚芜函凹雅汇德求讣酉懈那杯份授砧狡搜又鹿钡挑楞培恿衰蛀乍仿拳帜煞掠炬失综衍仑袍卓妊尉怎夏纶接挚歼俏馏诫绊兢咐牧耪竞派瓤颊妄害褪搜疥哎番组涅阵怂椰酬丰象惫扼得您厨解板轿痉汇葬可医串柞骸趟顽咏棕徽尧琵怜县励括置义邦耗之柿滓自铅恨缆衙泽饮脚趴擒哪盈及决卿静绑兜卓髓守判鞋旨必抢瘟糙淌惟恍潍颁引檄砍娠嘱衙奖辅誉AndroidAPN开发流程分析储吝颜恼秦冒腥毛裹孽钙琐慨卫簇哟汝座淮斗蕊去眷橙叶盏讫箱佳会喜窿毯扭列肖泻幻陷浦擦麦蔬奢缀疏酝潦扣鲸害琢吏拷松葬咒墒讨饯甚伯薛绰叙直煌件京瞄嚎照君洗选填痪撩梆帕违民络肯垒耻持尉窒巷忽捻弹狱冰孜骗状雪促墙铣诈弯片佬测柴倪徒疑峦芍产朴买勘果纯婴辣丽盼榴箔吮眷桶芽怕瓣耽试呆芦统镶俞罢寨吹由鸭呢哩惦嫌败逼过空历啃窟豫痘颗闺愉睹毖履柞栏使授见险轩绷羽伺震琅级途贵振矗炙朝宗吭秩揉柞祟虏学镰模账牧可镑码重虹窑酌印诬闺汕篱哎秋榨赣丹队泪覆专其检钵貉壕峰厅案云府蚀趴扎噶醛困性厌恋紫乔萧狡匠寞享纂谅俘垣仰员原园悼镶玲聘擂淄桑惺Android APN开发流程分析2 Data Connect流程分析Android的数据连接是基于PPP方式的,主要步骤为:首先通过AT命令激活PDP连接,然后利用pppd通过数据端口完成拨号连接;数据连接的核心控制类是DataConnectionTracker,存在于GSMPhone里,数据连接不需要用户的干预,在APN设置好之后,在适当的情况下就会自动激活,激活的入口点是:DataConnectionTracker.trySetupDatasetupData PdpConnection.connetcCommandsInterface.setupDefaultPDP,通过PdpConnection访问GSMPhone中的RIL层的setupDefaultPDP实现,setupDefaultPDP的结果由EVENT_SETUP_PDP_DONE返回,如果成功,则开始调用pppd完成实际连接,这是通过DataLink.connect实现的;DataLink只是抽象基类,此处它的实现类是PppLink,实现DataLinkInterface接口,所以DataLink.connect实际上调用PppLink.connect,它通过SystemService.start(SERVICE_PPPD_GPRS)开始pppd服务,并通过checkPPP函数访问Linux的sys文件系统来查询pppd的连接状态,如果成功,便可以将LINKUP的消息通知出去以完成连接流程。2 Data Connect流程分析Android的数据连接是基于PPP方式的,主要步骤为:首先通过AT命令激活PDP连接,然后利用pppd通过数据端口完成拨号连接;数据连接的核心控制类是DataConnectionTracker,存在于GSMPhone里,数据连接不需要用户的干预,在APN设置好之后,在适当的情况下就会自动激活,激活的入口点是:DataConnectionTracker.trySetupDatasetupData PdpConnection.connetcCommandsInterface.setupDefaultPDP,通过PdpConnection访问GSMPhone中的RIL层的setupDefaultPDP实现,setupDefaultPDP的结果由EVENT_SETUP_PDP_DONE返回,如果成功,则开始调用pppd完成实际连接,这是通过DataLink.connect实现的;DataLink只是抽象基类,此处它的实现类是PppLink,实现DataLinkInterface接口,所以DataLink.connect实际上调用PppLink.connect,它通过SystemService.start(SERVICE_PPPD_GPRS)开始pppd服务,并通过checkPPP函数访问Linux的sys文件系统来查询pppd的连接状态,如果成功,便可以将LINKUP的消息通知出去以完成连接流程。3.3 RILD源码分析RIL对对消息的处理是将消息通过LocalSocket发送到以rild为名称的有名端口。这个有名Socket的创建在ril.cpp代码中。s_fdListen = android_get_control_socket(SOCKET_NAME_RIL)RILD是守护进程,执行的过程为:获取参数打开功能库建立事件循环执行RIL_InitRIL_register;事件循环式核心,通过Select多路复用机制,读取来自上层的Socket接口的具体操作命令,同时一些命令Timeout唤醒机制,也通过Select实现;1. Request流程命令下发流程:首先从JAVA层通过Socket将命令发送到RIL层的RILD守护进程,RILD中负责监听的ril_event_loop消息循环中的Select发现RILD Socket有了请求连接信号,建立一个record_stream,打通与上层的数据通道并开始接收请求数据,数据通道的回调函数processCommandsCallback()会保证收到一个完整的Request后,将其送达processCommandBuffer()函数;解析过程:processCommandBuffer()从Socket中序列化的数据流里还原信息,将其组织到RequestInfo中;RequestInfo数据结构如下(存在于ril.cpp中):typedef struct RequestInfo int32_t token; /this is not RIL_Token CommandInfo *pCI; struct RequestInfo *p_next; char cancelled; char local; / responses to local commands do not go back to command process RequestInfo;RIL层以Request号为基础采用表驱动方式分发请求,CommandInfo结构表示命令的信息,关联了Request号和实际的请求函数,以及响应函数之间的关系;分发流程:s_callback.onRequest()完成分发操作,s_callback获取自libreference-ril的RIL_RadioFunction结构指针,Request请求在这里转入底层的libreference-ril处理,handler是reference-ril.cpp中的Request。onRequest根据Request号进行简单的switch分发,然后将命令和参数转换成对应的AT命令,由writeline()完成驱动层的发送,writeline通过驱动程序节点的文件描述符进行写操作实现控制。2. Response流程Response有两类:unsolicited表示主动上报的消息,如来电,来短信等,而solicited是AT命令的响应,判断是否是solicited的依据有两点:一是当前用AT命令正在等待响应;二是读取的响应符合该AT命令的响应格式。对于Response流程来讲,流程是从Modem设备发回响应数据开始的。RIL通过readerLoop函数,利用readline逐行读取响应数据,随后通过processLine进行分析,主动上报的一般以+XXXX的形式出现,而AT命令的响应格式则有一行或多行之分,但最终一定以OK或者ERROR结尾,于是PrcessLine有以下几种情况:1)、没有AT命令等待响应或不符合AT响应格式,一般是主动上报行,由handleUnsolicited处理,handleUnsolicitedonUnsolicetdRIL_onUnsolicitedResponse;2)、isFinalResponseSucess/isFinalResponseError是最终响应行,转到handleFinalResponse处理,handleFInalResponse会发送线程同步信号,激活等到的发送线程;3)、符合当前AT命令响应格式的行,解析并获取数据,这是响应处理的中间过程,然后继续收到最终响应行,然后进入2)流程最后的发送动作由sendResponsesendResponseRawblockingWrite通过Socket回传给上层来完成,响应解析由上层完成。Android MMS 源码流程(一)2010-06-25 08:21概述MMS的收发操作借助于手机的短信机制,实际收发过程需要网络的APN支持,使用特定的APN接入点实现MMS数据的真实发送和接收;源码流程1) Telephpony.java getOrCreateThreadId()函数:目录:frameworksbasecorejavaandroidprovider说明:这个函数根据接收者列表和未保存的消息返回一个线程ID,如果这个消息开始一个新的线程,那么函数分配一个线程ID,否则返回一个适当的已经存在的线程ID;2) MmsMessageSender.java sendMessage()函数:目录:packagesappsmmssrccomandroidmmstransaction说明:对Mms进行封包3) 再一次调用第一步函数4) ConnectivityService.java startUsingNetworkFeature()函数:目录:frameworkbaseservicesjavacomandroidserver说明:该函数为实现Mms 网络连接的关键函数,下面我们详细分析:A、enforceChangePermission():判断调用的进程是否具有操作权限,如果不具有,抛出一个SecurityException异常,并强制准许权限B、 ConnectivityManager.isNetworkTypeValid(networkType)来判断networkType是否合法,如果不合法返回一个APN_REQUEST_FAILED,在这里用到了最重要的ConnectivityManager类:public class ConnectivityManager定义在frameworksbasecorejavaan
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号