Как мне отсортировать ScanResult из WifiManager на основе сигнала? - PullRequest
0 голосов
/ 14 июня 2019

Я искал в стеке потока процесс сортировки списка по уровню сигнала (в библиотеке WifiManager это называется level).Я видел, что вы можете использовать функцию 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);

1 Ответ

0 голосов
/ 14 июня 2019

вам нужно передать логику сравнения в сортировку коллекции ;

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());
...