如何在.NET MAUI应用中获取已检测到的WiFi网络SSID?
在.NET MAUI中获取已检测到的WiFi网络SSID(Android平台)
Android 10(API级别29)开始,旧的WifiManager.ScanResults访问方式权限收紧且部分API标记过时,以下是适配后的实现步骤:
1. 添加必要权限
在Platforms/Android/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- Android 12+ 专属权限,可替代位置权限用于WiFi扫描 --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" />
2. 请求运行时权限
由于位置、附近WiFi设备权限属于危险权限,需动态请求:
using Microsoft.Maui.ApplicationModel; // 在交互逻辑中(如按钮点击)执行权限请求 var locationStatus = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>(); if (locationStatus != PermissionStatus.Granted) { locationStatus = await Permissions.RequestAsync<Permissions.LocationWhenInUse>(); } // Android 12+ 额外请求附近WiFi设备权限 if (DeviceInfo.Version.Major >= 12) { var wifiPermissionStatus = await Permissions.CheckStatusAsync<Permissions.NearbyWifiDevices>(); if (wifiPermissionStatus != PermissionStatus.Granted) { wifiPermissionStatus = await Permissions.RequestAsync<Permissions.NearbyWifiDevices>(); } }
3. 获取WiFi扫描结果(Android平台特定代码)
使用MAUI的条件编译编写Android专属逻辑:
#if ANDROID using Android.Content; using Android.Net.Wifi; // 获取WifiManager实例 var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService); // 触发扫描以获取最新结果(Android 10+标记为过时,但仍可使用) bool scanInitiated = wifiManager.StartScan(); if (!scanInitiated) { // 扫描启动失败,可添加错误处理逻辑 return; } // 遍历扫描结果提取SSID foreach (var result in wifiManager.ScanResults) { string ssid = result.Ssid; if (!string.IsNullOrEmpty(ssid)) { // 处理获取到的SSID,如打印或添加到列表 Console.WriteLine($"检测到WiFi: {ssid}"); } } #endif
注意事项
- 位置服务必须开启:即使权限已授予,设备位置关闭时仍无法获取扫描结果。
- 隐藏网络:隐藏WiFi的SSID为空字符串,无法直接识别。
- 前台限制:Android 10+仅允许前台应用获取扫描结果;Android 12+使用
NEARBY_WIFI_DEVICES权限时,不可用于位置跟踪,否则仍需位置权限。
内容的提问来源于stack exchange,提问作者loury Pe
相关产品推荐
相关产品推荐

