我正在开发一个Xamarin Forms应用程序,我想每秒检查一次是否有网络连接,如果连接丢失,程序应该跳转到不同的页面。 我正在使用“Xam.Plugin.Connectivity”插件,但它不能满足我的需求。 是否可能实现我想要的功能?
我正在开发一个Xamarin Forms应用程序,我想每秒检查一次是否有网络连接,如果连接丢失,程序应该跳转到不同的页面。 我正在使用“Xam.Plugin.Connectivity”插件,但它不能满足我的需求。 是否可能实现我想要的功能?
编辑:使用新的Xamarin Essentials 连通性插件可以轻松完成此操作,只需按照那里的说明即可 :D
在您的App.cs(或App.xaml.cs)中创建一个方法,如下所示:
private async void CheckConnection()
{
if(!CrossConnectivity.Current.IsConnected)
await Navigation.PushAsync(new YourPageWhenThereIsNoConnection());
else
return;
}
并在您的主应用程序方法中像这样使用它:
public App()
{
InitializeComponent();
var seconds = TimeSpan.FromSeconds(1);
Xamarin.Forms.Device.StartTimer(seconds,
() =>
{
CheckConnection();
});
}
虽然您没有使用过,但这是有关您正在使用的插件的文档。
检测连接更改
通常情况下,您可能需要根据网络更改通知用户或做出响应。您可以通过订阅几个不同的事件来实现此目的。
连接更改
当获得、更改或丢失任何网络连接时,您可以注册一个事件来触发:
/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged;
You will get a ConnectivityChangeEventArgs with the status if you are connected or not:
public class ConnectivityChangedEventArgs : EventArgs
{
public bool IsConnected { get; set; }
}
public delegate void ConnectivityChangedEventHandler(object sender, ConnectivityChangedEventArgs e);
CrossConnectivity.Current.ConnectivityChanged += async (sender, args) =>
{
Debug.WriteLine($"Connectivity changed to {args.IsConnected}");
};
连接类型更改
当任何网络连接类型更改时,将触发此事件。通常它也伴随着一个“连接变更”事件。
/// <summary>
/// Event handler when connection type changes
/// </summary>
event ConnectivityTypeChangedEventHandler ConnectivityTypeChanged;
When this occurs an event will be triggered with EventArgs that have the most recent information:
public class ConnectivityTypeChangedEventArgs : EventArgs
{
public bool IsConnected { get; set; }
public IEnumerable<ConnectionType> ConnectionTypes { get; set; }
}
public delegate void ConnectivityTypeChangedEventHandler(object sender, ConnectivityTypeChangedEventArgs e);
Example:
CrossConnectivity.Current.ConnectivityTypeChanged += async (sender, args) =>
{
Debug.WriteLine($"Connectivity changed to {args.IsConnected}");
foreach(var t in args.ConnectionTypes)
Debug.WriteLine($"Connection Type {t}");
};