Android wifi列表中去自身的热门

[复制链接]
发表于 2025-11-7 20:43:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Android wifi列表中去自身的热门

一、前言

Android wifi列表中能搜刮到自身的热门wifi?
正常手机上都不会出现这个标题;大概是体系底层已经做了过滤处理惩罚。
现实开辟中Android装备的Wifi能搜刮到自身热门也大概会存在。
比如基于两个单独的wifi双模组硬件在装备上运行就有大概出现这个标题;
之前同一个硬件上的双模组wifi硬件都是没有这个标题标。
双模组wifi是为了更好支持wifi和热门隔离的硬件,
Android 双模组的环境大概会存在wifi列表中搜刮到自己的热门名称是可以正常毗连,
但是装备重启后wifi会处于不停毗连和断开的状态。
不确定底层是否可以优化处理惩罚这个热门wifi体现的标题;
但是应用上也是可以过滤体现的;
应用扫描到后,不体现到自身的热门wifi,如许也可以克制毗连和后续的标题。
Android wifi列表中去自身的热门wifi的关键是判定热门的mac地点和wifi的BSSID是否同等。
这里纪录一下,平常不肯定用得到!
二、从扫描的Wifi列表中去除自身热门Wifi的实现

1、获取节点的mac地点代码实现

输入节点名称即可获取mac地点。
  1.     //获取XXX 节点MAC地址
  2.     public static String getHardwareAddress(String name) {
  3.         Enumeration<NetworkInterface> interfaces = null;
  4.         try {
  5.             interfaces = NetworkInterface.getNetworkInterfaces();
  6.         } catch (SocketException e) {
  7.             e.printStackTrace();
  8.         }
  9.         String hardWareAddress = null;
  10.         NetworkInterface iF = null;
  11.         if (interfaces == null) {
  12.             return null;
  13.         }
  14.         while (interfaces.hasMoreElements()) {
  15.             iF = interfaces.nextElement();
  16.             try {
  17.                 if (iF.getName().equals(name)) {
  18.                     hardWareAddress = bytesToString(iF.getHardwareAddress());
  19.                     break;
  20.                 }
  21.             } catch (SocketException e) {
  22.                 e.printStackTrace();
  23.             }
  24.         }
  25.         return hardWareAddress;
  26.     }
  27.     private static String bytesToString(byte[] bytes) {
  28.         if (bytes == null || bytes.length == 0) {
  29.             return null;
  30.         }
  31.         StringBuilder buf = new StringBuilder();
  32.         for (byte b : bytes) {
  33.             buf.append(String.format("%02X:", b));
  34.         }
  35.         if (buf.length() > 0) {
  36.             buf.deleteCharAt(buf.length() - 1);
  37.         }
  38.         return buf.toString();
  39.     }
复制代码
上面的就是获取节点信息的代码。节点其他信息有需求的也可以获取。
2、wifi列表中过滤热门wifi的代码
  1.   final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
  2.         if(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED){
  3.             //如果热点开了并且WiFi扫描到了本机自己的热点的话去掉
  4.             String localHotspotMac = EthernetUtil.getHardwareAddress("ap0");
  5.             LogUtil.debug("ap0 mac = " + localHotspotMac);
  6.             if(localHotspotMac == null || localHotspotMac.isEmpty()){
  7.                 localHotspotMac = EthernetUtil.getHardwareAddress("wlan1");
  8.                 LogUtil.debug("wlan mac = " + localHotspotMac);
  9.             }
  10.             int localHotspotIndex = -1;
  11.             for (int i = 0; i < accessPoints.size(); i++) {
  12.                 AccessPoint accessPoint = accessPoints.get(i);
  13.                 if(accessPoint.getBssid() != null && accessPoint.getBssid().equalsIgnoreCase(localHotspotMac)){
  14.                     localHotspotIndex = i;
  15.                     LogUtil.debug("accessPoint.getSsidStr()--" + accessPoint.getSsidStr() +" accessPoint.getBssid()--"+accessPoint.getBssid() + localHotspotMac);
  16.                     break;
  17.                 }
  18.             }
  19.             if(localHotspotIndex >= 0){
  20.                 accessPoints.remove(localHotspotIndex);
  21.                 LogUtil.debug("accessPoints size after remove:" + accessPoints.size());
  22.             }
  23.         }
复制代码
Android装备热门正常节点都是ap0,但是也会有装备有的wlan1;
也有的两个节点都用的环境,比如热门+投屏;
以是启动哪个节点是热门写死在上面就行,不须要判定两个节点的逻辑。
上面举例的是SettingsLib获取wifi列表的方式获取的wifi信息对象 AccessPoint。
假如是wifi扫描的平凡对象ScanResult 也是有BSSID这个信息的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表