唯一过滤wifi网络名称

问题描述 投票:1回答:1

我想在微调器中显示可用的wifi网络的列表。但是在当前版本中,当范围内有许多wifi网络时,我会得到很多重复的网络和空白值。如何唯一标识每个wifi网络名称?我尝试了各种方法,但仍然无法正确获取它。在这方面的任何帮助将不胜感激。我当前为android 24及更高版本编写的代码是:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            List<ScanResult> wifiList = wifiManager.getScanResults();
            ssids = wifiList.stream()
                    .map(scanResult -> scanResult.SSID)
                    .filter(ssid -> ssid.equals(""))
                    .distinct()
                    .collect(Collectors.toList());

            deviceList = new String[ssids.size()];
            for (int i = 0; i < ssids.size(); i++) {
                deviceList[i] = ((ssids.get(i)));

                if(SCAN_RESULTS_AVAILABLE_ACTION.equals(true)){
                    wifiManager.disconnect();
                }
            }


             ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, 
             android.R.layout.simple_spinner_item, deviceList) {
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {

                    View v = super.getView(position, convertView, parent);
                    if (position == getCount()) {
                        ((TextView)v.findViewById(android.R.id.text1)).setText("");
                        ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); 
                        //"Hint to be displayed"
                    }

                    return v;
                }

                @Override
                public int getCount() {
                    return super.getCount()-1; // you don't display last item. It is used as hint.
                }
            };
            adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
            wifiDeviceList.setAdapter(adapter);
            wifiDeviceList.setSelection(adapter.getCount());//set the hint the default selection so it appears on launch.
            wifiDeviceList.setOnItemSelectedListener(this);
            adapter.notifyDataSetChanged();
        }
java android android-arrayadapter android-wifi wifimanager
1个回答
0
投票
您可能会看到属于不同网络但名称相同的其他路由器(例如“ netgear”或“ dlink”)。这在密集的居民区很常见。

您可能还会看到属于

same网络的不同路由器。这些将是公司网络上的不同接入点,例如,为了提供最大的覆盖范围而进行了战略定位。

您可能还会看到合法重复的条目。

您有几种方法来处理这些问题,但是普遍接受的方法是通过BSSID进行重复数据删除,然后显示带有信号表的SSID列表。

上面代码的问题是filter()不能按您期望的方式工作。似乎您期望它过滤

out

ssid.equals(""),而实际上filter()会删除所有

not符合条件的项目。您可以在Stream documentation page上看到一个示例。

您想将Stream更改为.filter(ssid -> ssid.equals(""))
© www.soinside.com 2019 - 2024. All rights reserved.