始终检查Xamarin Forms是否存在互联网连接

7

我正在开发一个Xamarin Forms应用程序,我想每秒检查一次是否有网络连接,如果连接丢失,程序应该跳转到不同的页面。 我正在使用“Xam.Plugin.Connectivity”插件,但它不能满足我的需求。 是否可能实现我想要的功能?


2
连接插件具有在连接更改时触发的事件,这不符合您的要求吗? - Jason
我不知道,我会像Alessandro Caliaro一样查看文档。 - Phill
2个回答

24

编辑:使用新的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();
        });
}

{btsdaf} - Phill
{btsdaf} - FabriBertani
{btsdaf} - Phill
@Phill,您可以使用 -> new NavigationPage().PushAsync(new YourPageWhenThereIsNoConnection()) 来获取该方法。 - zulqadar idrishi

10

虽然您没有使用过,但这是有关您正在使用的插件的文档。

检测连接更改

通常情况下,您可能需要根据网络更改通知用户或做出响应。您可以通过订阅几个不同的事件来实现此目的。

连接更改

当获得、更改或丢失任何网络连接时,您可以注册一个事件来触发:

/// <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}");
  };

感谢您花时间研究所提供的现有工具,做得非常好。 - Christopher Richmond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接