Android P WiFi自动连接评分机制

本文详细介绍了Android P中WifiConnectivityManager的初始化过程,包括网络评估和评分机制。在初始化阶段,WifiStateMachine和WifiInjector注册了NetworkEvaluator。在评估过程中,通过SavedNetworkEvaluator对网络进行筛选和评分,考虑因素包括RSSI、5G频段、用户选择奖励、相同网络ID、相同BSSID和安全性。此外,文章还提及了Android N与L版本之间的区别。

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

1、WifiConnectivityManager的初始化

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java

private void setupClientMode() {
    Log.d(TAG, "setupClientMode() ifacename = " + mInterfaceName);
    mWifiStateTracker.updateState(WifiStateTracker.INVALID);

    if (mWifiConnectivityManager == null) {
        synchronized (mWifiReqCountLock) {
            mWifiConnectivityManager =
                    mWifiInjector.makeWifiConnectivityManager(mWifiInfo,
                                                              hasConnectionRequests());
            mWifiConnectivityManager.setUntrustedConnectionAllowed(mUntrustedReqCount > 0);
            mWifiConnectivityManager.handleScreenStateChanged(mScreenOn);
        }
    }

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiInjector.java

public WifiConnectivityManager makeWifiConnectivityManager(WifiInfo wifiInfo,
                                                           boolean hasConnectionRequests) {
    return new WifiConnectivityManager(mContext, getScoringParams(),
            mWifiStateMachine, getWifiScanner(),
            mWifiConfigManager, wifiInfo, mWifiNetworkSelector, mWifiConnectivityHelper,
            mWifiLastResortWatchdog, mOpenNetworkNotifier, mCarrierNetworkNotifier,
            mCarrierNetworkConfig, mWifiMetrics, mWifiStateMachineHandlerThread.getLooper(),
            mClock, mConnectivityLocalLog, hasConnectionRequests, mFrameworkFacade,
            mSavedNetworkEvaluator, mScoredNetworkEvaluator, mPasspointNetworkEvaluator);
}

构造方法里注册了3个NetworkEvaluator frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java

WifiConnectivityManager(Context context, ScoringParams scoringParams,
        WifiStateMachine stateMachine,
        WifiScanner scanner, WifiConfigManager configManager, WifiInfo wifiInfo,
    // Register the network evaluators
    mNetworkSelector.registerNetworkEvaluator(savedNetworkEvaluator,
            SAVED_NETWORK_EVALUATOR_PRIORITY);
    if (hs2Enabled) {
        mNetworkSelector.registerNetworkEvaluator(passpointNetworkEvaluator,
                PASSPOINT_NETWORK_EVALUATOR_PRIORITY);
    }
    mNetworkSelector.registerNetworkEvaluator(scoredNetworkEvaluator,
            SCORED_NETWORK_EVALUATOR_PRIORITY);
}

注册方法就是初始化一个NetworkEvaluator数组,大小为6,即优先级从高到低0-5。 frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNetworkSelector.java

public boolean registerNetworkEvaluator(NetworkEvaluator evaluator, int priority) {
    if (priority < 0 || priority >= EVALUATOR_MIN_PRIORITY) {
        localLog("Invalid network evaluator priority: " + priority);
        return false;
    }

    if (mEvaluators[priority] != null) {
        localLog("Priority " + priority + " is already registered by "
                + mEvaluators[priority].getName());
        return false;
    }

    mEvaluators[priority] = evaluator;
    return true;
}

private final NetworkEvaluator[] mEvaluators = new NetworkEvaluator[MAX_NUM_EVALUATORS];

public static final int MAX_NUM_EVALUATORS = EVALUATOR_MIN_PRIORITY;

/**
 * WiFi Network Selector supports various types of networks. Each type can
 * have its evaluator to choose the best WiFi network for the device to connect
 * to. When registering a WiFi network evaluator with the WiFi Network Selector,
 * the priority of the network must be specified, and it must be a value between
 * 0 and (EVALUATOR_MIN_PIRORITY - 1) with 0 being the highest priority. Wifi
 * Network Selector iterates through the registered scorers from the highest priority
 * to the lowest till a network is selected.
 */
public static final int EVALUATOR_MIN_PRIORITY = 6;

2、WifiConnectivityManager的网络评估

处理扫描结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值