我正在尝试实现一个简单的通知程序,当应用程序中的网络连接发生变化时,该通知程序将广播消息。
我遇到的问题是,虽然当我的代码要求时,类会返回正确的连接状态,但是当连接状态发生变化时,我的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);
}
答案 0 :(得分:0)
我不能说出你的方法有什么问题,但我几天前已经做过了,所以这是我的工作范例:
https://thomasbandt.com/how-to-check-network-reachability-with-xamarinios-on-ios-8
答案 1 :(得分:0)
您应该尝试使用xamarin中提供的就绪Connectivity Plugin,非常方便使用。
这是一个简单的跨平台插件,用于检查移动设备的连接状态,收集连接类型,带宽等。