ConnectivityService处理wifi连接

本文主要介绍了Android中WIFI连接流程及管理。ConnectivityService管理系统网络,在WIFI连接到链路层特定状态时,WifiNetworkAgent与ConnectivityService建立联系并注册。当获得IP地址后,通过一系列消息处理更新网络状态,还会进行protal上网验证和网络管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ConnectivityService用来管理系统中所有网络,谁能连接,谁需要断开。在连接一个网络是,收集网络信息,通过ConnetivityManager提供给应用使用。

在WIFI连接过程中,到链路层L2ConnectedState状态时,有:

class L2ConnectedState extends State {
    @Override
        public void enter() {
            mNetworkAgent = new WifiNetworkAgent(getHandler().getLooper(), mContext,
                    "WifiNetworkAgent", mNetworkInfo, mNetworkCapabilitiesFilter,
                    mLinkProperties, 60, mNetworkMisc);
        }
}

WifiNetworkAgent集成自NetworkAgent,NetworkAgent作为一种网络的代理,和ConnectivityService建立联系。

private class WifiNetworkAgent extends NetworkAgent {

public WifiNetworkAgent(Looper l, Context c, String TAG, NetworkInfo ni, NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc) {
            super(l, c, TAG, ni, nc, lp, score, misc);
        }
}

NetworkAgent构造方法为:

 public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
            NetworkCapabilities nc, LinkProperties lp, int score) {
        this(looper, context, logTag, ni, nc, lp, score, null);
    }

    public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
            NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc) {
        super(looper);
        LOG_TAG = logTag;
        mContext = context;
        if (ni == null || nc == null || lp == null) {
            throw new IllegalArgumentException();
        }

        if (VDBG) log("Registering NetworkAgent");
        ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
                Context.CONNECTIVITY_SERVICE);
        netId = cm.registerNetworkAgent(new Messenger(this), new NetworkInfo(ni),
                new LinkProperties(lp), new NetworkCapabilities(nc), score, misc);
    }

最后通过registerNetworkAgent向ConnectivityManager注册NetworkAgent。此处传入了networkinfo,wifi连接状态是CONNECTING, 传入了score = 60,looper参数是消息处理位置,这里是WifiStateMachine. registerNetworkAgent通过ConnectivityManager到达ConnectivityService.

    public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo,
            LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
            int currentScore, NetworkMisc networkMisc) {
        enforceConnectivityInternalPermission();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值