You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:10