首页 > 解决方案 > 如何根据信号对 WifiManager 中的 ScanResult 进行排序?

问题描述

我在 stackoverflow 上查看如何根据信号强度对列表进行排序(level在 WifiManager 库中引用)。我看到你可以使用这个功能Collection.sort()。但是,我很困惑我想通过 对列表进行排序这一事实level,其中最高数字在开头,最低数字在底部。

如您所见,它在每个对象中返回了一些内容: https ://developer.android.com/reference/android/net/wifi/ScanResult.html 我不是那么先进,但我知道我可以通过执行访问该级别像这样的东西

for (int i=0; i < scanList.size(); i++) {
    System.out.println(scanList.get(i).level); // Prints the level for each access point
}

WifiManager myWifiManager;
myWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
myWifiManager.startScan();
List<ScanResult> scanList = myWifiManager.getScanResults();
Collections.sort(scanList);

标签: androidsortingandroid-wifiwifimanager

解决方案


您需要将比较逻辑传递给Collection sort

class Signal_Strength_Comparator implements Comparator<ScanResult> {
    @Override
    public int compare(ScanResult scan0, ScanResult scan1) {
        return scan0.level-scan1.level;
    }
}

现在将其传递给 Collection.sort:

WifiManager myWifiManager;
myWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
myWifiManager.startScan();
List<ScanResult> scanList = myWifiManager.getScanResults();
Collections.sort(scanList,new Signal_Strength_Comparator());

推荐阅读