首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
物联网/工业互联网
›
物联网
›
Android wifi列表中去自身的热门
返回列表
发新帖
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地点。
//获取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这个信息的。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
浏览过的版块
Oracle
刘俊凯
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表