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的网络评估
处理扫描结果