分离连接更改 Xamarin Forms
Detaching Connectivity Changes Xamarin Forms
我正在使用 Xamarin.Essentials 来处理连接变化,这一切都适用于 android
但是我注意到在 iOS 它没有工作,我调试并注意到
在iOS物理设备中向下滑动屏幕
将 phone 置于飞行模式并移除 wifi
触发睡眠事件并移除连接
//App.Xaml
protected override void OnSleep()
{
Connectivity.ConnectivityChanged -= OnConnectivityChanged;
}
protected override void OnStart()
{
Connectivity.ConnectivityChanged += OnConnectivityChanged;
}
protected override void OnResume()
{
Connectivity.ConnectivityChanged += OnConnectivityChanged;
}
如果我注释掉
Connectivity.ConnectivityChanged -= OnConnectivityChanged;
一切正常。
我错过了显而易见的事情吗?
我应该在哪里断开连接?
这是因为 Forms 生命周期与原生平台的声明式生命周期方式有些不同,您可以直接在原生 ios 生命周期中进行。
在您的 ios 项目中 AppDelegate.cs :
public override void OnActivated(UIApplication application)
{
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
}
public override void DidEnterBackground(UIApplication uiApplication)
{
Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
}
private void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
//do some thing
}
你可以参考lefecycle.
注意:
在 iOS 13(及以后),您还需要将它们写入 SceneDelegate。
我正在使用 Xamarin.Essentials 来处理连接变化,这一切都适用于 android
但是我注意到在 iOS 它没有工作,我调试并注意到
在iOS物理设备中向下滑动屏幕
将 phone 置于飞行模式并移除 wifi
触发睡眠事件并移除连接
//App.Xaml protected override void OnSleep() { Connectivity.ConnectivityChanged -= OnConnectivityChanged; } protected override void OnStart() { Connectivity.ConnectivityChanged += OnConnectivityChanged; } protected override void OnResume() { Connectivity.ConnectivityChanged += OnConnectivityChanged; }
如果我注释掉
Connectivity.ConnectivityChanged -= OnConnectivityChanged;
一切正常。 我错过了显而易见的事情吗?
我应该在哪里断开连接?
这是因为 Forms 生命周期与原生平台的声明式生命周期方式有些不同,您可以直接在原生 ios 生命周期中进行。
在您的 ios 项目中 AppDelegate.cs :
public override void OnActivated(UIApplication application)
{
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
}
public override void DidEnterBackground(UIApplication uiApplication)
{
Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
}
private void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
//do some thing
}
你可以参考lefecycle.
注意: 在 iOS 13(及以后),您还需要将它们写入 SceneDelegate。