【问题标题】:Monotouch - Getting notified when network status changedMonotouch - 当网络状态改变时得到通知
【发布时间】:2013-10-20 15:32:59
【问题描述】:

我熟悉“可达性”类来检查是否有互联网连接: https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs

我现在想知道是否有任何方法可以在网络状态发生变化时获得通知? 假设我的收藏是在没有互联网的情况下加载的。图像不会被加载。如果 iPad 突然再次联网,我想再次触发下载。

在可达性类中,我看到以下代码:

public static event EventHandler ReachabilityChanged;

    static void OnChange (NetworkReachabilityFlags flags)
    {
        var h = ReachabilityChanged;
        if (h != null)
            h (null, EventArgs.Empty);
    }

但是,如果我在“OnChange”方法中设置断点,则在我关闭 Wifi 时不会调用它。

有什么想法吗?

问候,马特

【问题讨论】:

    标签: xamarin.ios xamarin


    【解决方案1】:

    好吧,其实我应该自己找到答案的。

    在收到通知之前,您应该先调用以下函数:

    Reachability.InternetConnectionStatus (); 
    Reachability.LocalWifiConnectionStatus ();
    Reachability.RemoteHostStatus ();
    

    调用这 3 个静态函数调用将初始化所有必要的对象。这 3 个对象将在发生更改时收到通知,并在可达性调用中调用“OnChange”(通知您的事件处理程序)。

    (当然,更好的是创建一个特殊函数来初始化所有需要的对象,这样您就不需要调用这 3 个函数,因为它们已经真正测试了网络连接)

    【讨论】:

      【解决方案2】:

      您应该能够简单地向 ReachabilityChanged 事件添加一个事件处理程序,例如(未编译的测试);

      Reachability.ReachabilityChanged += c_ReachabilityChanged;
      
      static void c_ReachabilityChanged(object sender, EventArgs e)
      {
          Console.WriteLine("Here I can handle that network reachability changed.");
      }
      

      【讨论】:

      • 我知道如何添加事件处理程序,但是在“OnChange”中从未调用断点,因此它也不会触发事件。我正在模拟器上通过关闭笔记本电脑的 Wifi 来测试它,并通过启动应用程序在设备上进行测试,转到设置以关闭 Wifi 并返回应用程序。我不确定我的测试场景是否良好。
      • @Matt 抱歉,当时可能误解了您要问的内容,并且断开笔记本电脑的连接应该进行测试。如果该课程不适合您,您可以register a broadcast receiver 监控网络状态。
      • 你误解了它并不奇怪,因为我的话有点混乱(我改变了它)关于事件。您提供的链接适用于 Android (monodroid),而不适用于 iOS (monotouch)。无论如何,我为您的链接添加了书签,因为如果我将我的应用程序移植到 Android 上,我可以使用它:-)
      • @Matt 很好,您找到了解决方案,我应该停止在烹饪时发布答案,以免感到困惑;)
      【解决方案3】:

      只要调用这个就可以了,可以写在 AppDelegate 中

      Reachability.RemoteHostStatus ();
      
      Reachability.ReachabilityChanged += ReachabilityChanged;
      
      static void ReachabilityChanged(object sender, EventArgs e){//Do Something};
      

      【讨论】:

        猜你喜欢
        • 2014-07-17
        • 2015-01-18
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多