android 系统数据业务---打开(下)

本文详细介绍了Android系统中数据业务的连接过程,从DcActivatingState的状态转换到DcActiveState,讨论了DcNetworkAgent在数据连接中的角色,以及ConnectivityService如何管理网络,涉及到跨进程通信和网络配置的各个环节。
摘要由CSDN通过智能技术生成

2.3状态转换

上一小节中,调用onConnect 方法拨号后就接着调用transitionTo方法进入了DcActivatingState状态,

当RIL收到RIL_REQUEST_SETUP_DATA_CALL消息时, 将向DataConnection发送

EVENT_SETUP_DATA_CONNECTION_DONE的消息. DcActivatingState的processMessage方法

处理EVENT_SETUP_DATA_CONNECTION_DONE消息主要逻辑如下,

首先调用onSetupConnectionCompleted解析拨号结果,

ar = (AsyncResult) msg.obj;
cp = (ConnectionParams) ar.userObj;
DataCallResponse.SetupResult result = onSetupConnectionCompleted(ar);

然后根据拨号结果分别进行处理,

switch (result) {
    case SUCCESS:
           // All is well
           mDcFailCause = DcFailCause.NONE;
           transitionTo(mActiveState);
           break;
    case ERR_BadCommand:
           •••
           mInactiveState.setEnterNotificationParams(cp, result.mFailCause);
           transitionTo(mInactiveState);
           break;
•••

如果拨号成功就进入DcActiveState状态,

如果拨号过程中出现问题就进入DcInactiveState状态。

到此,和RIL交互已经告一段落了。接着看phone进程的处理。

 

直接分析正常的情况, DcActiveState状态。

DcActiveState进入时会调用enter方法, DcActiveState实现了自己的enter方法,如下,

首先通知其它APK,例如SystemUI,拨号成功。SystemUI会刷新界面的一些状态信息等等。

notifyAllOfConnected(Phone.REASON_CONNECTED);

当然,将信息传递给apk,一般有2种方法,

将相关信息通过广播发送出去,apk一般注册广播就可以了;

另外一种是通过回调接口,apk注册回调,直接监听状态就可以了。

但是对于phone信息,还可以通过TelephonyManager接口主动查询。

因此如何通知在此就不论述了。

然后更新DcNetworkAgent对象,通过DcNetworkAgent配置路由等,让终端可以真正的访问网络。对应的代码如下,

mNetworkAgent = new DcNetworkAgent(getHandler().getLooper(), mPhone.getContext(),
   "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值