Xamarin.Forms项目添加ConnectivityChanged事件处理器后不触发如何解决
问题核心
你自定义了ConnectivityChanged事件,但没有和Xamarin.Essentials提供的系统级网络状态变更事件关联,你自己声明的事件没有主动触发的逻辑,自然不会执行事件处理方法。
解决步骤
- 移除你代码中自定义的
ConnectivityChanged事件和OnConnectivityChanged触发方法,直接使用Xamarin.Essentials内置的网络变更事件即可 - 调整事件订阅逻辑,绑定官方事件,同时补充取消订阅逻辑避免内存泄漏
修改后的完整代码
public partial class Main : TabbedPage { public Main() { InitializeComponent(); // 订阅Xamarin.Essentials提供的系统网络变更事件 Xamarin.Essentials.Connectivity.ConnectivityChanged += HandleConnChange; } // 参数匹配官方事件定义的参数类型 void HandleConnChange(object sender, Xamarin.Essentials.ConnectivityChangedEventArgs e) { Console.WriteLine("A network change was detected"); // 可扩展获取当前网络状态逻辑:e.NetworkAccess } // 页面销毁时取消订阅,避免内存泄漏 protected override void OnDisappearing() { base.OnDisappearing(); Xamarin.Essentials.Connectivity.ConnectivityChanged -= HandleConnChange; } }
额外注意事项
- 确认已安装最新版Xamarin.Essentials NuGet包,Android平台的
MainActivity.OnCreate方法中已调用Xamarin.Essentials.Platform.Init(this, savedInstanceState);完成初始化 - 你之前添加的
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]权限配置正确,无需修改 - iOS平台无需额外权限配置,可直接使用该能力
内容的提问来源于stack exchange,提问作者Owen Burns
相关产品推荐
相关产品推荐

