Android P WiFi自动连接评分机制

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的网络评估

处理扫描结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值