在MAUI应用开发中,实时获取网络状态变化是很多功能实现的基础,比如离线缓存、网络请求重试、内容加载提示等场景都需要用到网络状态监听能力。MAUI官方提供了Connectivity相关API,开发者可以直接调用这些接口完成网络状态的监听和获取。
环境准备
首先需要确认你的MAUI项目已经引用了必要的包,MAUI的Connectivity API属于Microsoft.Maui.Essentials命名空间,新建的MAUI项目默认已经包含相关依赖,不需要额外安装其他NuGet包。如果需要手动确认,可以在项目文件里查看是否包含以下引用:
<ItemGroup> <PackageReference Include="Microsoft.Maui.Essentials" Version="1.0.0" /> </ItemGroup>
核心API说明
MAUI的Connectivity相关功能主要通过Connectivity静态类实现,常用的属性和方法如下:
| 成员类型 | 名称 | 说明 |
|---|---|---|
| 属性 | NetworkAccess | 获取当前网络访问状态,返回NetworkAccess枚举值,比如Internet表示可访问互联网,None表示无网络 |
| 属性 | ConnectionProfiles | 获取当前连接的网络类型,返回ConnectionProfile枚举集合,比如Wifi、Cellular等 |
| 事件 | ConnectivityChanged | 网络状态发生变化时触发的事件,订阅该事件即可实时获取状态变更通知 |
监听网络状态变化的实现步骤
1. 获取当前网络状态
可以先通过Connectivity的静态属性获取初始的网络状态,示例代码如下:
// 获取当前网络访问权限
var currentAccess = Connectivity.NetworkAccess;
// 获取当前网络连接类型
var currentProfiles = Connectivity.ConnectionProfiles;
// 判断是否有互联网访问权限
if (currentAccess == NetworkAccess.Internet)
{
Console.WriteLine("当前可以访问互联网");
// 遍历连接类型
foreach (var profile in currentProfiles)
{
Console.WriteLine($"当前网络类型:{profile}");
}
}
else
{
Console.WriteLine($"当前无互联网访问,状态:{currentAccess}");
}
2. 订阅网络状态变化事件
要实现实时监听,需要订阅ConnectivityChanged事件,事件的处理方法会接收ConnectivityChangedEventArgs参数,里面包含变更后的网络状态信息:
public class NetworkMonitor
{
public void StartMonitor()
{
// 订阅网络状态变化事件
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
}
private void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
// 获取变化后的网络访问状态
var newAccess = e.NetworkAccess;
// 获取变化后的网络连接类型
var newProfiles = e.ConnectionProfiles;
// 处理状态变更逻辑
if (newAccess == NetworkAccess.Internet)
{
Console.WriteLine("网络已恢复,可访问互联网");
foreach (var profile in newProfiles)
{
Console.WriteLine($"当前网络类型:{profile}");
}
}
else
{
Console.WriteLine($"网络已断开,当前状态:{newAccess}");
}
}
public void StopMonitor()
{
// 取消订阅事件,避免内存泄漏
Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
}
}
3. 在页面中使用监听功能
可以在MAUI的页面生命周期中启动和停止监听,比如在页面显示时启动,页面消失时停止,避免不必要的资源占用:
public partial class MainPage : ContentPage
{
private NetworkMonitor _networkMonitor;
public MainPage()
{
InitializeComponent();
_networkMonitor = new NetworkMonitor();
}
protected override void OnAppearing()
{
base.OnAppearing();
// 页面显示时启动网络监听
_networkMonitor.StartMonitor();
}
protected override void OnDisappearing()
{
base.OnDisappearing();
// 页面消失时停止网络监听
_networkMonitor.StopMonitor();
}
}
注意事项
- 事件订阅后一定要在不需要的时候取消订阅,否则可能导致页面无法被垃圾回收,引发内存泄漏问题。
- NetworkAccess枚举的其他取值还包括Local表示只能访问本地网络,ConstrainedInternet表示受限的互联网访问,None表示无网络,实际开发中可以根据需求判断。
- 不同平台的网络状态回调可能有细微差异,比如iOS和Android的后台网络限制不同,测试时建议多平台验证。
网络状态监听功能属于系统级权限,不需要额外申请运行时权限,MAUI会自动处理不同平台的权限适配问题。
MAUIConnectivity网络状态监听跨平台开发修改时间:2026-07-21 21:03:36