Android平台Xamarin.Forms获取WiFi信号强度:最新方法及代码报错解决
适用于Android设备的Xamarin.Forms获取WiFi信号强度的最新方案
解决你代码中的三个问题:
- GetSystemService和WifiService不存在:
在Xamarin.Android中,GetSystemService是Context类的方法,不能直接调用,需通过Android.App.Application.Context获取全局上下文;WifiService对应Context.WifiService常量,而非直接写WifiService。 - CalculateSignalLevel过时:
Android API 30+标记该方法过时,推荐直接通过信号强度值(item.Level)计算百分比,公式为:Math.Max(0, Math.Min(100, (item.Level + 100) * 100 / 50))(WiFi信号强度通常在-100到-50之间,-50为最强,-100为最弱)。
完整实现代码
using Android.Net.Wifi; using Android.Content; using Android.App; public static void PrintWifiSignalStrength() { // 获取WiFi管理器实例 var wifiMgr = (WifiManager)Application.Context.GetSystemService(Context.WifiService); // 检查WiFi是否开启 if (!wifiMgr.IsWifiEnabled) { Console.WriteLine("WiFi未开启"); return; } // 获取扫描结果(需权限支持) var scanResults = wifiMgr.ScanResults; if (scanResults == null || scanResults.Count == 0) { Console.WriteLine("未扫描到WiFi网络"); return; } foreach (var result in scanResults) { // 计算信号强度百分比(替代过时的CalculateSignalLevel) int signalStrengthPercent = Math.Max(0, Math.Min(100, (result.Level + 100) * 100 / 50)); Console.WriteLine($"WiFi SSID: {result.Ssid} - 信号强度: {signalStrengthPercent}%"); } }
必要权限配置
- 在
AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- Android 6.0(API 23)及以上版本需要动态申请
ACCESS_FINE_LOCATION权限,否则无法获取扫描结果。
内容的提问来源于stack exchange,提问作者DumbestGuyOnSaturn
相关产品推荐
相关产品推荐

