uni-app 获取wifi MAC及SSID

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app 获取wifi MAC及SSID

3 回复

第三方s d k原生插件开发定制,qq:16792999


Q 1196097915 私聊,我可以做,

在uni-app中获取WiFi的MAC地址和SSID(服务集标识符)通常涉及到访问设备的网络状态信息。然而,由于隐私和安全考虑,现代操作系统(如iOS和Android)对这类信息的访问进行了严格的限制。尤其是在iOS上,几乎不可能直接获取WiFi的MAC地址和SSID。在Android上,从Android 6.0(API 级别 23)开始,获取这些信息也需要在运行时请求适当的权限,并且即使有了权限,从Android 9.0(API 级别 28)开始,通过Wi-Fi API获取到的BSSID(MAC地址)可能会被随机化。

以下是一个在Android平台上尝试获取WiFi信息(SSID和BSSID,即MAC地址的近似值)的示例代码。请注意,由于上述限制,这个代码可能无法在所有设备和版本上正常工作。

Android权限配置

首先,你需要在manifest.json中添加必要的权限:

"mp-weixin": {
  "appid": "YOUR_APPID",
  "permission": {
    "android.permission.ACCESS_WIFI_STATE": {
      "desc": "获取WiFi状态"
    },
    "android.permission.CHANGE_WIFI_STATE": {
      "desc": "改变WiFi状态"
    },
    "android.permission.ACCESS_FINE_LOCATION": {
      "desc": "访问精确位置信息"
    }
  }
}

获取WiFi信息的代码

在页面的onLoad或某个事件中,你可以尝试获取WiFi信息:

// 引入uni-app的API
const wifiManager = plus.android.importClass('android.net.wifi.WifiManager');
const wifiInfo = plus.android.importClass('android.net.wifi.WifiInfo');
const context = plus.android.runtimeMainActivity();

// 获取WiFi服务
const wifiService = context.getSystemService(context.WIFI_SERVICE);

// 检查WiFi是否开启
if (wifiService.isWifiEnabled()) {
  const info = wifiService.getConnectionInfo();
  
  // 获取SSID
  const ssid = info.getSSID();
  console.log("SSID:", ssid);
  
  // 获取BSSID(可能已经被随机化)
  const bssid = info.getBSSID();
  console.log("BSSID:", bssid);
} else {
  console.log("WiFi未开启");
}

注意事项

  1. 权限请求:在实际应用中,你需要在运行时请求ACCESS_FINE_LOCATION权限,因为从Android 6.0开始,获取WiFi扫描结果需要这个权限。
  2. API限制:如上文所述,从Android 9.0开始,BSSID可能会被随机化,这意味着你无法获取到真实的MAC地址。
  3. iOS限制:在iOS上,获取WiFi信息更加困难,通常无法通过标准API获取到SSID和MAC地址。

由于这些限制,建议在设计应用时尽量避免依赖这类敏感信息。

回到顶部