数据业务建立流程之DcTracker创建过程(原)

DcTracker作为Telephony框架的数据业务核心,负责处理数据网络的相关请求。本文详细介绍了DcTracker的初始化流程,包括监听器的设置、NetworkFactory的创建以及初始APN的配置,特别是APN参数的获取和紧急APN的初始化步骤。
摘要由CSDN通过智能技术生成

一、DcTracker介绍


        DcTracker是Telephony框架中负责数据业务的核心(类似于GsmCallTracker是通话业务核心,GsmServiceStateTracker是网络CS业务的核心),所有对数据网络的请求(打开关闭数据开关、切换数据卡、修改APN参数等)都会发送到该处理中心来处理。本节所涉及的大部分代码也都在该对象中。下面我们先来看该对象的初始化流程。

        DcTracker是在Phone对象创建过程中被创建的,确切来说,如果当前使用的是GSMPhone,那么在GSMPhone创建过程中就会创建DcTracker对象:
        @GSMPhone.java
        public GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) {
            //创建DcTracker对象,传递的参数就是当前的GSMPhone对象
            mDcTracker = new DcTracker(this);
        }
        那么DcTracker是什么属性呢?
        public final class DcTracker extends DcTrackerBase {}
        public abstract class DcTrackerBase extends Handler {}
        从这里看到,DcTracker的父类是DcTrackerBase, 他们的本质都是Handler
        然后来看DcTracker的初始化过程:
        @DcTracker.java
        public DcTracker(PhoneBase p) {
            super(p);
            mDataConnectionTracker = this;
            //注册监听器
            update();


            //监听APN状态
            mApnObserver = new ApnChangeObserver();
            p.getContext().getContentResolver().registerContentObserver(Telephony.Carriers.CONTENT_URI, true, mApnObserver);


            //从networkAttributes数组中初始化APN参数
            initApnContexts();


            for (ApnContext apnContext : mApnContexts.values()) {
                IntentFilter filter = new IntentFilter();
                filter.addAction(INTENT_RECONNECT_ALARM + '.' + apnContext.getApnType());
                filter.addAction(INTENT_RESTART_TRYSETUP_ALARM + '.' + apnContext.getApnType());
                mPhone.getContext().registerReceiver(mIntentReceiver, filter, null, mPhone);
            }


            ConnectivityManager cm = (ConnectivityManager)p.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);


            //添加各种网络请求过滤器,用于根据这些过滤器发起不同的数据连接
            mNetworkFilter = new NetworkCapabilities();
            mNetworkFilter.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_IA);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_RCS);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
            mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
            //初始化数据网络的NetworkFactory,并设置数据网络的分值为50
            mNetworkFactory = new TelephonyNetworkFactory(this.getLooper(), p.getContext(), "TelephonyNetworkFactory", mNetworkFilter);
            mNetworkFactory.setScoreFilter(50);
            mNetworkFactoryMessenger = new Messenger(mNetworkFactory);
            cm.registerNetworkFactory(mNetworkFactoryMessenger, "Telephony");


            //初始化紧急APN
            initEmergencyApnSetting();
            addEmergencyApnSetting();


            mProvisionActionName = "com.android.internal.telephony.PROVISION" + p.getPhoneId();
        }
        在上面这个初始化过程中,主要完成了三个任务:
        1、初始化各种监听器;
        2、初始化TelephonyNetworkFactory对象;
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值