.NET MAUI中如何检测手机Wi-Fi开关状态?
在.NET MAUI中检测Android设备Wi-Fi开关状态的解决方案
问题根源
你遇到的空值警告与运行时空值问题,核心原因是两个潜在的空引用点:
Platform.CurrentActivity可能返回空值GetSystemService(Context.WifiService)获取的WifiManager实例可能为空
另外你提到的微软文档代码,本质就是WifiManager类中IsWifiEnabled属性的定义,和你代码里调用的wifiManager.IsWifiEnabled是同一个成员,用于直接获取Wi-Fi开关的启用状态。
修复方案
1. 添加必要权限
在Platforms/Android/AndroidManifest.xml中添加Wi-Fi状态访问权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2. 修复Android平台服务实现
修改Platforms/Android/WifiService.cs,增加空值安全判断,同时优化Activity获取逻辑:
using Android.Content; using Android.Net.Wifi; using WifiTest9.Platforms.Android; using Microsoft.Maui.ApplicationModel; [assembly: Dependency(typeof(WifiService))] namespace WifiTest9.Platforms.Android { public class WifiService : IWifiService { public bool IsWifiEnabled() { // 更可靠的获取当前Activity方式 var activity = Platform.CurrentActivity ?? Application.Context.GetTopActivity(); if (activity == null) return false; var wifiManager = (WifiManager)activity.GetSystemService(Context.WifiService); // 空值安全判断,避免空引用异常 return wifiManager?.IsWifiEnabled ?? false; } } }
注:若项目未引用
Microsoft.Maui.ApplicationModel,需通过NuGet安装对应包。
3. 优化调用端的空值处理
修改MainPage.xaml.cs中的CheckWiFiStatus方法,增加服务实例的空值判断:
private void CheckWiFiStatus() { var wifiService = DependencyService.Get<IWifiService>(); if (wifiService == null) { wifiStatusLabel.Text = "无法获取Wi-Fi服务"; return; } bool isWifiEnabled = wifiService.IsWifiEnabled(); wifiStatusLabel.Text = isWifiEnabled ? "Wi-Fi已开启" : "Wi-Fi已关闭"; }
内容的提问来源于stack exchange,提问作者MohammadHossein Parvaneh
相关产品推荐
相关产品推荐

