如何根据信号强度按升序对 getScanResults() 列表进行排序?

Posted

技术标签:

【中文标题】如何根据信号强度按升序对 getScanResults() 列表进行排序?【英文标题】:How can I sort the a list of getScanResults() based on Signal strength in ascending order? 【发布时间】:2013-06-21 13:00:27 【问题描述】:

我按照以下代码将扫描结果存储到列表中:

List<ScanResult> results = wifi.getScanResults();
             sb = new StringBuilder();
            try
            
                for(int i = 0; i < results.size(); i++)
                    sb.append(new Integer(i+1).toString() + ".");
                    sb.append("SSID:-").append((results.get(i).SSID).toString());
                    sb.append("BSSID:-").append((results.get(i).BSSID).toString());
                    sb.append("Level:-").append((results.get(i).level));
                    sb.append("Frequency:-").append((results.get(i).frequency));
                    sb.append("\n\n");
                
                textStatus.setText("");
                textStatus.append("\n\n\n");
                textStatus.append(sb);
            

我想根据信号强度(级别)对该结果进行排序,因此我正在创建一个具有数据级别和 Mac 的二维数组。所以我为此编写了代码:

String rssi[][]=new String[2][results.size()];
for(int i = 0; i <results.size(); i++)
         rssi[0][i] = String.valueOf(results.get(i).level);
         rssi[1][i]= results.get(i).BSSID;


StringBuilder tmp=new StringBuilder();
Arrays.sort(rssi,new Comparator<String[]>() 
       @Override
       public int compare(String[] str1, String[] str2) 
           final String lv1= str1[0];
           final String lv2= str2[0];
           return lv1.compareTo(lv2);
       
);

根据上面的代码,我期待rssi[][] 按排序顺序,但它没有发生......

【问题讨论】:

【参考方案1】:

试试这个

     Comparator<ScanResult> comparator = new Comparator<ScanResult>() 
        @Override
        public int compare(ScanResult lhs, ScanResult rhs) 
            return (lhs.level <rhs.level ? -1 : (lhs.level==rhs.level ? 0 : 1));
        
     
     List<ScanResult> results = wifi.getScanResults();
     Collections.sort(results, comparator);

     //Here your list is sorted by level

【讨论】:

您还可以利用WifiManager.compareSignalLevel 方法中内置的比较器代替return 行上的语句:developer.android.com/reference/android/net/wifi/…, int)

以上是关于如何根据信号强度按升序对 getScanResults() 列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中按升序对多维数组进行排序? [复制]

GSM返回'99'时如何确定信号强度?

如何根据优先级升序排列待办事项列表

android中如何获取WIFI信号的强度?

如何使用 Objective-C 从 iOS 上的 iBeacon 数据包中获取信号强度值

获取系统的网络状态与无线网的信号强度