Xamarin iOS NetworkReachability.SetNotification未触发

时间:2015-05-27 22:55:25

标签: xamarin xamarin.ios

我正在尝试实现一个简单的通知程序,当应用程序中的网络连接发生变化时,该通知程序将广播消息。

我遇到的问题是,虽然当我的代码要求时,类会返回正确的连接状态,但是当连接状态发生变化时,我的networkreachability对象的.SetNotification方法不会被触发。

这是我的连接状态检查代码,如果有人可以帮助突出我做错了会非常感谢,谢谢。

public event EventHandler ReachabilityChanged;

public NetworkStatus Status ()
{
    if(_defaultRouteReachability == null)
    {
        _defaultRouteReachability = new NetworkReachability(new IPAddress(0));
    }

    _defaultRouteReachability.SetNotification(OnChange);
    _defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
    _defaultRouteReachability.TryGetFlags (out _flags);

    return ParseFlags ();
}

NetworkStatus ParseFlags ()
{
    if (_flags == 0)
        return NetworkStatus.NotReachable;

    if (_flags.HasFlag(NetworkReachabilityFlags.ConnectionRequired)   ||
        _flags.HasFlag(NetworkReachabilityFlags.InterventionRequired) ||
        _flags.HasFlag(NetworkReachabilityFlags.ConnectionOnDemand))
    {
        return NetworkStatus.NotReachable;  
    }

    if (_flags.HasFlag (NetworkReachabilityFlags.TransientConnection) || 
        _flags.HasFlag (NetworkReachabilityFlags.IsWWAN))
    {
        return NetworkStatus.ReachableViaCarrierDataNetwork;
    }

    return NetworkStatus.ReachableViaWiFiNetwork;
}

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

2 个答案:

答案 0 :(得分:0)

我不能说出你的方法有什么问题,但我几天前已经做过了,所以这是我的工作范例:

https://thomasbandt.com/how-to-check-network-reachability-with-xamarinios-on-ios-8

答案 1 :(得分:0)

您应该尝试使用xamarin中提供的就绪Connectivity Plugin,非常方便使用。

这是一个简单的跨平台插件,用于检查移动设备的连接状态,收集连接类型,带宽等。