Android wifi列表中去自身的热点

devtools/2025/1/19 11:27:20/

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地址。

//获取XXX 节点MAC地址public static String getHardwareAddress(String name) {Enumeration<NetworkInterface> interfaces = null;try {interfaces = NetworkInterface.getNetworkInterfaces();} catch (SocketException e) {e.printStackTrace();}String hardWareAddress = null;NetworkInterface iF = null;if (interfaces == null) {return null;}while (interfaces.hasMoreElements()) {iF = interfaces.nextElement();try {if (iF.getName().equals(name)) {hardWareAddress = bytesToString(iF.getHardwareAddress());break;}} catch (SocketException e) {e.printStackTrace();}}return hardWareAddress;}private static String bytesToString(byte[] bytes) {if (bytes == null || bytes.length == 0) {return null;}StringBuilder buf = new StringBuilder();for (byte b : bytes) {buf.append(String.format("%02X:", b));}if (buf.length() > 0) {buf.deleteCharAt(buf.length() - 1);}return buf.toString();}

上面的就是获取节点信息的代码。节点其他信息有需求的也可以获取。

2、wifi列表中过滤热点wifi的代码

  final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();if(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED){//如果热点开了并且WiFi扫描到了本机自己的热点的话去掉String localHotspotMac = EthernetUtil.getHardwareAddress("ap0");LogUtil.debug("ap0 mac = " + localHotspotMac);if(localHotspotMac == null || localHotspotMac.isEmpty()){localHotspotMac = EthernetUtil.getHardwareAddress("wlan1");LogUtil.debug("wlan mac = " + localHotspotMac);}int localHotspotIndex = -1;for (int i = 0; i < accessPoints.size(); i++) {AccessPoint accessPoint = accessPoints.get(i);if(accessPoint.getBssid() != null && accessPoint.getBssid().equalsIgnoreCase(localHotspotMac)){localHotspotIndex = i;LogUtil.debug("accessPoint.getSsidStr()--" + accessPoint.getSsidStr() +" accessPoint.getBssid()--"+accessPoint.getBssid() + localHotspotMac);break;}}if(localHotspotIndex >= 0){accessPoints.remove(localHotspotIndex);LogUtil.debug("accessPoints size after remove:" + accessPoints.size());}}

Android设备热点正常节点都是ap0,但是也会有设备有的wlan1;
也有的两个节点都用的情况,比如热点+投屏;
所以启动哪个节点是热点写死在上面就行,不需要判断两个节点的逻辑。

上面举例的是SettingsLib获取wifi列表的方式获取的wifi信息对象 AccessPoint。

如果是wifi扫描的普通对象ScanResult 也是有BSSID这个信息的。


http://www.ppmy.cn/devtools/151804.html

相关文章

02UML图(D1_结构图)

目录 学习前言 ---------------------------------- 讲解一&#xff1a;类图 一、类图的组成结构 1. 类(Class) 1.1. 类的成员变量的表示方式 1.2. 类的成员方法的表示方式 2. 接口&#xff08;Interface&#xff09; 3. 包&#xff08;Package&#xff09; 二、UML类…

[Azure] 如何解决个人账号无法直接登录的问题:利用曲线救国方法访问Speech Studio

近期,Azure的一些用户反映,他们在尝试通过个人账号登录Azure Portal时遇到问题,登录失败或无法访问已创建的资源。虽然Azure可能正在进行一些后台改制,导致了这一问题的发生,但用户仍然需要访问和使用一些资源(比如Speech Studio中的服务)。本文将分享一种曲线救国的解决…

测试集群内主机链路带宽并生成网络拓扑图

测试集群内主机链路带宽并生成网络拓扑图 一、背景二、操作步骤1.修改 Docker 源2.启动 Redis 服务3.创建 Python 3.10 容器4.在容器内安装依赖5.创建删除 Redis 集合的脚本 reset.py6.创建发布本地 IP 的脚本 publish.py7.创建带宽测试的脚本 benchmark.py8.创建生成网络拓扑图…

网络设备安全保证计划 (NESAS) - 供应商视角 笔记

NESAS 对供应商的意义 提升产品安全性: NESAS 为供应商提供了一套全球认可的安全评估标准&#xff0c;帮助其识别和解决产品中的安全漏洞。通过 NESAS 评估&#xff0c;供应商可以证明其产品符合行业最高安全标准&#xff0c;增强客户信任。增强市场竞争力: 通过 NESAS 认证的…

【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的

SSMS 20在连接Sql server 2022数据库时有如下报错&#xff1a; A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…

electron 获取本机 ip 地址

1. 主进程代码 在主进程中&#xff0c;使用 os 模块获取本机 IP 地址&#xff0c;并通过 ipcMain 将结果发送给渲染进程。 // main.jsconst { app, BrowserWindow, ipcMain } require("electron");const os require("os");function createWindow() {c…

SpringMVC 实战指南:文件上传

第一章&#xff1a;常用的注解&#xff1a; RequestParam 注解&#xff1a; 作用&#xff1a;把请求中的指定名称的参数传递给控制器中的形参赋值属性&#xff1a; value&#xff1a;请求参数中的名称required&#xff1a;请求参数中是否必须提供此参数&#xff0c;默认值是 tr…

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快&#xff0c;最近准备在一个新项目上采用新一代的linux核心板&#xff0c;发现linux内核的版本已经更新到5.4以上甚至6.0以上&#xff1b;之前常用的linux内核版本是2.6.4&#xff0c;虽然在某些项目上还能用但是明显跟不上时代的步伐了&#xff0c;所以要…