[RK3288][Android6.0] WiFi之priority计算及使用

本文介绍了在Rockchip平台、Android 6.0系统下,基于3.10.92内核的WiFi连接中如何计算和使用优先级。在RSSI相等且无用户特定选择时,系统会根据优先级选择最佳网络。此外,优先级也在pno列表排序中起到关键作用。

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

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

优先级的计算:

public boolean processMessage(Message message) {
    case WifiManager.CONNECT_NETWORK:
    //注意第二个参数是true
    if (mWifiConfigStore.selectNetwork(config, /* updatePriorities = */ true,
       message.sendingUid) && mWifiNative.reconnect()) 
}
boolean selectNetwork(WifiConfiguration config, boolean updatePriorities, int uid) {
    //第一连接的时候mLastPriority为默认值-1,条件成立
    // Reset the priority of each network at start or if it goes too high.
    if (mLastPriority == -1 || mLastPriority > 1000000) {
        for(WifiConfiguration config2 : mConfiguredNetworks.values()) {
            if (updatePriorities) {
                if (config2.networkId != INVALID_NETWORK_ID) {
                    config2.priority = 0;
                    setNetworkPriorityNative(config2.networkId, config.priority);
                }
            }
        }
        //优先级从0开始
        mLastPriority = 0;
    }

    // Set to the highest priority and save the configuration.
    if (updatePriorities) {
        //每连接一次会累加,也就是说最后连接的无线网络优先级总要比前面高,除非主动设置
        config.priority = ++mLastPriority;
        //跟新到wpa_supplicant的优先级列表中
        setNetworkPriorityNative(config.networkId, config.priority);
        buildPnoList();
    }

    //保存优先级属性到配置wpa_supplicant.conf文件中
    if (updatePriorities)
        mWifiNative.saveConfig();
    else
        mWifiNative.selectNetwork(config.networkId);
}

优先级的使用:
当RSSI相同以及没有user choice的时候,会用优先级去比较选择使用哪个作为最佳网络
最佳网络的选择可参考WiFi之Autojoin对无线网络的选择机制

int compareWifiConfigurations(WifiConfiguration a, WifiConfiguration b) {
{
    if (order == 0) {
        // We don't know anything - pick the last seen i.e. K behavior
        // we should do this only for recently picked configurations
        if (a.priority > b.priority) {
            // a is of higher priority - descending
            if (VDBG) {
                logDbg("    compareWifiConfigurations prefers -1 " + a.configKey() + " over "
                        + b.configKey() + " due to priority");
            }

            order = -1;
        } else if (a.priority < b.priority) {
            // a is of lower priority - ascending
            if (VDBG) {
                logDbg("    compareWifiConfigurations prefers +1 " + b.configKey() + " over "
                        + a.configKey() + " due to priority");
            }
            order = 1;
        }
    }
}

另外在pno list排序时也有用到优先级:

private void buildPnoList() {
    mCachedPnoList = new ArrayList<WifiNative.WifiPnoNetwork>();

    ArrayList<WifiConfiguration> sortedWifiConfigurations
            = new ArrayList<WifiConfiguration>(getConfiguredNetworks());
    Log.e(TAG, "buildPnoList sortedWifiConfigurations size " + sortedWifiConfigurations.size());
    if (sortedWifiConfigurations.size() != 0) {
        // Sort by descending priority
        Collections.sort(sortedWifiConfigurations, new Comparator<WifiConfiguration>() {
            public int compare(WifiConfiguration a, WifiConfiguration b) {
                return a.priority - b.priority;
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值