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

Posted

技术标签:

【中文标题】连接性 - 如何手动/以编程方式将 IsConnected 属性设置为 False【英文标题】:Connectivity - How to Manually / Programmatically Set IsConnected Property to False 【发布时间】:2018-08-15 18:20:54 【问题描述】:

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

CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>

    page.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
;

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

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

【问题讨论】:

使用飞行模式 @Jason - 很遗憾,我正在使用模拟器,但无法设置飞行模式。 ***.com/questions/4808433/… 【参考方案1】:

实现一个 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);

【讨论】:

【参考方案2】:

我认为没有办法以编程方式模拟丢失的网络连接。您显然可以在模拟器和真实设备上做其他事情来实现您正在寻找的东西。我不确定这里的用例是什么,但你可以尝试使用类似

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

而不是依赖 IsConnected 属性,正如您所说,它是只读的。 如果您希望用户“断开连接”,请给方法一个无效的主机名,如果您希望他们“连接”,请给它一些有效的东西。

【讨论】:

以上是关于连接性 - 如何手动/以编程方式将 IsConnected 属性设置为 False的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取 iPhone 的运营商信号强度

如何以编程方式将 ethers.js 库与 Rinkeby 连接?

如何以编程方式将 2 个或多个 .WAV 文件连接在一起?

如何以编程方式校准传感器,而不是手动设置 *#0*#?

如何“手动”(以编程方式)在古腾堡中插入一个块?

如何将(以编程方式)谷歌字体添加到 ckeditor