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

.NET MAUI中ConnectivityChanged Handler网络切换时未触发问题

问题解决:Android 14下ConnectivityChanged事件不触发的修复方案

1. 补全Android权限配置

Android 14(API 34)对网络权限有明确要求,必须在AndroidManifest.xml中声明必要权限,否则无法监听网络状态变化:

<!-- 允许获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 若需访问互联网,需添加此权限 -->
<uses-permission android:name="android.permission.INTERNET" />

注:ACCESS_NETWORK_STATE属于Android 13+的正常权限,无需动态申请,但必须在清单文件中声明。

2. 修正事件订阅的生命周期问题

ViewModel的生命周期与页面不同步,直接在ViewModel构造函数中绑定全局事件可能导致订阅失效。建议在页面的生命周期方法中管理事件的订阅与取消:

页面代码示例(如MainPage.xaml.cs)

protected override void OnAppearing()
{
    base.OnAppearing();
    // 页面显示时订阅事件
    Connectivity.ConnectivityChanged += ViewModel.ConnectivityHandler;
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    // 页面隐藏时取消订阅,避免内存泄漏
    Connectivity.ConnectivityChanged -= ViewModel.ConnectivityHandler;
}

同时将ViewModel中的ConnectivityHandler修改为public或内部可见的访问级别。

3. 优化事件处理器逻辑

直接使用事件参数e.NetworkAccess判断网络状态,比调用全局Connectivity.NetworkAccess更准确及时:

private async void ConnectivityHandler(object sender, ConnectivityChangedEventArgs e)
{
    if (e.NetworkAccess == NetworkAccess.Internet)
    {
        InternetConnected = true;
        await _toastService.ShowToast("Back Online", ToastDuration.Short, 20);
        await GetAllUsers();
        IsRefreshing = false;
    }
    else
    {
        InternetConnected = false;
    }
}

4. 调试排查技巧

  • 在事件处理器开头添加调试日志,确认事件是否触发:
    private async void ConnectivityHandler(object sender, ConnectivityChangedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine($"网络状态变更:{e.NetworkAccess}");
        // 后续逻辑...
    }
    
  • 在ViewModel构造函数中添加日志,确认事件订阅代码是否执行:
    public UserViewModel(...)
    {
        // ...其他初始化代码
        System.Diagnostics.Debug.WriteLine("ViewModel已初始化,绑定ConnectivityChanged事件");
        Connectivity.ConnectivityChanged += ConnectivityHandler;
    }
    
  • 测试时覆盖多种网络场景:切换WiFi、移动数据、飞行模式,确保触发条件全面。

5. 确认MAUI版本兼容性

确保使用的MAUI版本支持Android 14,建议升级至最新稳定版,避免已知的网络监听兼容性bug。

内容的提问来源于stack exchange,提问作者Pratik Panchal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:54:51