连接 - 如何手动/编程将IsConnected属性设置为False

时间:2018-03-07 15:22:12

标签: xamarin xamarin.forms connectivity

在Xamarin插件Connectivity (Xam.Plugin.Connectivity)中,有一种从PCL轻松检测网络连接变化的方法,例如:

CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
{
    page.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
};

属性IsConnected是只读的,所以我的问题是:

有没有办法手动/编程将IsConnected设置为false或以其他方式模拟丢失的网络连接?

2 个答案:

答案 0 :(得分:0)

我不相信有一种方法可以以编程方式模拟丢失的网络连接。显然,你可以在模拟器和真实设备上做其他事情来实现你想要的东西。我不确定这里的用例是什么,但你可以尝试使用像

这样的东西

CrossConnectivity.Current.IsRemoteReachable("TestHostname", 80, 1000)

而不是依赖于IsConnected属性,正如您所说的那样,它是只读的。 如果您希望用户“断开连接”,请将方法设为无效的主机名,如果您希望将它们“连接”,请将其设置为有效的。

答案 1 :(得分:0)

实施MockConnectivity:

using Plugin.Connectivity.Abstractions;

namespace MyMockConnectivity
{
  public class MockConnectivity : BaseConnectivity
  {
    public void SetIsConnected(bool value)
    {
        OnConnectivityChanged(new ConnectivityChangedEventArgs { IsConnected = value });
    }

    public override bool IsConnected { get; }
...

使用:

using MyMockConnectivity;
using Plugin.Connectivity.Abstractions;
...
MockConnectivity MockConnectivity = new MockConnectivity();
IConnectivity Current = MockConnectivity;

Current.ConnectivityChanged += (sender, args) =>
{
  Debug.WriteLine("IsConnected: " + args.IsConnected);
};

模拟连接更改:

// Simulate network connection
MockConnectivity.SetIsConnected(true);

// Simulate lost network connection
MockConnectivity.SetIsConnected(false);