Java 扫描时唯一地识别Wifi网络

Java 扫描时唯一地识别Wifi网络,java,android,arraylist,wifimanager,Java,Android,Arraylist,Wifimanager,我想在我的应用程序中添加Wifi扫描功能,该功能将扫描范围内的所有Wifi网络,并在微调器中列出SSID。我已经使用以下代码实现了这一点。但当扫描时,它会显示多个同名网络名称(使用手机的wifi设置扫描时,没有相同的网络)以及微调器中的许多空行。我非常感谢任何关于如何通过在不重复或空行的情况下唯一标识网络名称来防止此问题的建议 请在这里找到我的Wifi接收器类别 class WifiReceiver extends BroadcastReceiver { WifiManager wifi

我想在我的应用程序中添加Wifi扫描功能,该功能将扫描范围内的所有Wifi网络,并在微调器中列出SSID。我已经使用以下代码实现了这一点。但当扫描时,它会显示多个同名网络名称(使用手机的wifi设置扫描时,没有相同的网络)以及微调器中的许多空行。我非常感谢任何关于如何通过在不重复或空行的情况下唯一标识网络名称来防止此问题的建议

请在这里找到我的Wifi接收器类别

class WifiReceiver extends BroadcastReceiver {
    WifiManager wifiManager;
    Spinner wifiDeviceList;
    String[] deviceList;
public WifiReceiver(WifiManager wifiManager, Spinner wifiDeviceList) {
    this.wifiManager = wifiManager;
    this.wifiDeviceList = wifiDeviceList;
}


public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
        List<ScanResult> wifiList = wifiManager.getScanResults();
        deviceList = new String[wifiList.size()];

        for (int i = 0; i < wifiList.size(); i++) {
            deviceList[i] = ((wifiList.get(i).SSID));
        }


ArrayAdapter arrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, deviceList);

        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        wifiDeviceList.setAdapter(arrayAdapter);

    }
}
}
class WifiReceiver扩展了BroadcastReceiver{
WifiManager WifiManager;
纺织商;
弦[]魔术师;
公共WifiReceiver(WifiManager WifiManager、Spinner wifiDeviceList){
this.wifiManager=wifiManager;
this.wifiDeviceList=wifiDeviceList;
}
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(WifiManager.SCAN\u结果\u可用\u操作.equals(操作)){
List wifiList=wifiManager.getScanResults();
deviceList=新字符串[wifiList.size()];
对于(int i=0;i
从API级别24(Android 7.0)开始,先按最强网络排序:

List<ScanResult> wifiList = wifiManager.getScanResults();
List<String> ssids = wifiList.stream()
    .sorted((sr1, sr2) -> sr1.compareTo(sr2)) 
    .map(scanResult -> scanResult.SSID)
    .filter(ssid -> ssid.equals(""))
    .distinct()
    .collect(Collectors.toList());
List wifiList=wifiManager.getScanResults();
列表ssids=wifiList.stream()
.排序((sr1,sr2)->sr1.比较(sr2))
.map(scanResult->scanResult.SSID)
.filter(ssid->ssid.equals(“”)
.distinct()
.collect(Collectors.toList());

感谢您的回复。但由于某些原因,排序和级别(ScanResult::level)不存在。你能解释一下你的答案吗?那是我的错误。现在已经修复了,我也检查了上面的修复(我已经添加了运行上述api 24以后代码的条件)。但是我仍然收到很多空话和重复的网络。