基于wifiManager的网络扫描及IP地址获取

场景描述

场景一:查看附近可连接wifi网络的信号强度(rssi)、热点能力、服务集标识(ssid)等信息,开发者可自定义策略选择网络

场景二:通过当前连接wifi的IP地址判断用户所属有关位置信息

方案描述

场景一:

  查看附近可连接wifi网络的信号强度(rssi)、热点能力、服务集标识(ssid)等信息,开发者可自定义策略选择网络

效果图

日志中打印结果显示可参考如图

方案

  当前暂不支持三方直接调用扫描能力,提供wifimanager.getScanInfoList方法获取到扫描结果

核心代码

try {
  let scanInfoList = wifiManager.getScanInfoList();
  console.info("scanInfoList:" + JSON.stringify(scanInfoList));
  let len = scanInfoList.length;
  console.log("wifi received scan info: " + len);
  if(len > 0){
    for (let i = 0; i < len; ++i) {
      console.info("ssid: " + scanInfoList[i].ssid);
      console.info("bssid: " + scanInfoList[i].bssid);
      console.info("capabilities: " + scanInfoList[i].capabilities);
      console.info("securityType: " + scanInfoList[i].securityType);
      console.info("rssi: " + scanInfoList[i].rssi);
      console.info("band: " + scanInfoList[i].band);
      console.info("frequency: " + scanInfoList[i].frequency);
      console.info("channelWidth: " + scanInfoList[i].channelWidth);
      console.info("timestamp: " + scanInfoList[i].timestamp);
    }
  }
}catch(error){
  console.error("failed:" + JSON.stringify(error));
}

场景二:

  通过当前连接wifi的IP地址判断用户所属有关位置信息

方案

  建立socket通信连接绑定本设备ip地址 / 获取本地WiFi的IP地址及特征,可参考@ohos.wifimanager.getLinkedInfo方法获取当前已连接wifi的地址信息

效果图

核心代码

  返回数据为格式需要调用位移符转换为”192.168.0.1“常见IP地址模式:

//返回参数格式转换
resolveIP(ip: number): string {
  if (ip < 0 || ip > 0xFFFFFFFF) {
    return "";
  }
  return (ip >>> 24) + '.' + (ip >> 16 & 0xFF) + '.' + (ip >> 8 & 0xFF) + '.' + (ip & 0xFF);
}
 
//获取当前连接wifi的IP地址
wifiManager.getLinkedInfo().then(data => {
  console.info("get wifi linked info: " + JSON.stringify(this.resolveIP(data.ipAddress)));
 
}).catch((error:number) => {
  console.info("get linked info error");
});

 

在 Android 中,您可以使用以下方法来获取有线网络的 MAC 地址和 IP 地址: 1. 获取 MAC 地址: 使用 `WifiManager` 类的 `getConnectionInfo()` 方法可以获取到当前连接的 Wi-Fi 网络的信息,其中包括 MAC 地址。首先,您需要在 `AndroidManifest.xml` 文件中添加 `android.permission.ACCESS_WIFI_STATE` 权限,然后在您的代码中获取 `WifiManager` 对象,并调用 `getConnectionInfo()` 方法。 例如: ``` WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String macAddress = wifiInfo.getMacAddress(); ``` 2. 获取 IP 地址: 使用 `NetworkInterface` 类的 `getNetworkInterfaces()` 方法可以获取到当前设备所有网络接口的信息,然后遍历每个网络接口,调用 `getInetAddresses()` 方法获取到所有的 IP 地址。需要注意的是,这种方法可能获取到的是内网 IP 地址或者虚拟 IP 地址,如果要获取公网 IP 地址,可以通过第三方 API 来获取。 例如: ``` Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface networkInterface = interfaces.nextElement(); Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress inetAddress = addresses.nextElement(); if (!inetAddress.isLinkLocalAddress()) { String ip = inetAddress.getHostAddress(); // Do something with the IP address. } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值