Xamarin.Essentials: Connectivity能否获取Xamarin.Forms中已连接网络的SSID
Xamarin.Forms中Xamarin.Essentials Connectivity能否获取SSID?
Xamarin.Essentials的Connectivity模块无法直接获取已连接Wi-Fi网络的SSID,它的核心能力仅包括检测网络连接状态、判断连接类型(如Wi-Fi、蜂窝网络、以太网等),并未提供获取Wi-Fi名称的API。
若需要获取SSID,需通过Xamarin.Forms的**依赖服务(Dependency Service)**调用各平台原生API实现,以下是各平台的核心实现方式:
Android:
需先在AndroidManifest.xml中声明ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限,然后通过WifiManager获取当前连接的Wi-Fi信息:using Android.Content; using Android.Net.Wifi; public string GetCurrentSsid() { var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService); var wifiInfo = wifiManager.ConnectionInfo; return wifiInfo.Ssid?.Trim('"'); // 移除SSID自带的引号 }iOS:
需在Info.plist中添加位置权限声明(NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription),然后使用CNCopyCurrentNetworkInfo获取网络信息:using System; using CoreFoundation; using CoreTelephony; public string GetCurrentSsid() { var networkInfo = CNCopyCurrentNetworkInfo(IntPtr.Zero); if (networkInfo == IntPtr.Zero) return null; using (var dict = new NSDictionary(networkInfo)) { return dict.ObjectForKey(new NSString("SSID"))?.ToString(); } }UWP:
需在Package.appxmanifest中声明wiFiControl权限,通过WiFiAdapter扫描并筛选当前连接的网络:using System.Linq; using Windows.Devices.WiFi; public async System.Threading.Tasks.Task<string> GetCurrentSsid() { var accessStatus = await WiFiManager.RequestAccessAsync(); if (accessStatus != WiFiAccessStatus.Allowed) return null; var adapters = await WiFiAdapter.FindAllAdaptersAsync(); var currentAdapter = adapters.FirstOrDefault(); if (currentAdapter == null) return null; await currentAdapter.ScanAsync(); return currentAdapter.NetworkReport.AvailableNetworks .FirstOrDefault(n => n.ConnectionStatus == WiFiConnectionStatus.Connected) ?.Ssid; }
内容的提问来源于stack exchange,提问作者F.F
相关产品推荐
相关产品推荐

