Monotouch - 在网络状态发生变化时收到通知

时间:2013-10-12 17:18:40

标签: xamarin.ios xamarin

我熟悉“reachability”类以检查是否存在互联网连接: 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时不会调用它。

有什么想法吗?

问候,马特

3 个答案:

答案 0 :(得分:7)

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

在收到通知之前,您应首先调用以下功能:

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

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

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

答案 1 :(得分:2)

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

Reachability.ReachabilityChanged += c_ReachabilityChanged;

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

答案 2 :(得分:0)

只需调用即可,可以用AppDelegate编写

Reachability.RemoteHostStatus ();

Reachability.ReachabilityChanged += ReachabilityChanged;

static void ReachabilityChanged(object sender, EventArgs e){//Do Something};