【Android-WIFI】(四) Roaming机制Framework层源码分析

//packages/modules/Wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
private void handleScanResults(@NonNull List<ScanDetail> scanDetails,
        @NonNull String listenerName,
        boolean isFullScan,
        @NonNull HandleScanResultsListener handleScanResultsListener) {
    //....
    
    List<WifiCandidates.Candidate> candidates = mNetworkSelector.getCandidatesFromScan(
            scanDetails, bssidBlocklist, cmmStates, mUntrustedConnectionAllowed,
            mOemPaidConnectionAllowed, mOemPrivateConnectionAllowed);
    mLatestCandidates = candidates;
    mLatestCandidatesTimestampMs = mClock.getElapsedSinceBootMillis();
    //...
    
    if ((mOemPaidConnectionAllowed || mOemPrivateConnectionAllowed)
            && mActiveModeWarden.isStaStaConcurrencySupportedForRestrictedConnections()) {
        // Split the candidates based on whether they are oem paid/oem private or not.
        Map<Boolean, List<WifiCandidates.Candidate>> candidatesPartitioned =
                candidates.stream()
                        .collect(Collectors.groupingBy(c -> c.isOemPaid() || c.isOemPrivate()));
        List<WifiCandidates.Candidate> primaryCmmCandidates =
                candidatesPartitioned.getOrDefault(false, Collections.emptyList());
        List<WifiCandidates.Candidate> secondaryCmmCandidates =
                candidatesPartitioned.getOrDefault(true, Collections.emptyList());
        List<WifiCandidates.Candidate> secondaryCmmCandidates_filtered =
                getSecondaryCandidatesFiltered(secondaryCmmCandidates);
        // Some oem paid/private suggestions found, use secondary cmm flow.
        if (!secondaryCmmCandidates.isEmpty()) {
            handleCandidatesFromScanResultsUsingSecondaryCmmIfAvailable(
                    listenerName, primaryCmmCandidates, secondaryCmmCandidates_filtered,
                    handleScanResultsListener);
            return;
        }
        // intentional fallthrough: No oem paid/private suggestions, fallback to legacy flow.
    }
    handleCandidatesFromScanResultsForPrimaryCmmUsingMbbIfAvailable(
            listenerName, candidates, handleScanResultsListener);
}

扫描结果可连接,回调 handleScanResults。handleScanResult 中首先进行一下细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值