如何解释 Xamarin.iOS 中的 NetworkReachabilityFlags?
Posted
技术标签:
【中文标题】如何解释 Xamarin.iOS 中的 NetworkReachabilityFlags?【英文标题】:How to interpret NetworkReachabilityFlags in Xamarin.iOS? 【发布时间】:2014-04-08 13:18:17 【问题描述】:我正在使用NetworkReachability
来确定我的应用的连接状态:
NetworkReachability(this.currentHostUrl);
remoteHostReachability.SetNotification(this.ReachabilityChanged);
remoteHostReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
回调方法如下所示:
void ReachabilityChanged(NetworkReachabilityFlags flags)
this.reachable = (flags & NetworkReachabilityFlags.Reachable) > 0;
UIHelpers.GetAppDelegate().UpdateConnectivityToast(this.reachable);
现在如果我切换到飞行模式,回调会立即被调用,flags 参数为 0。然后,在它再次触发后不久,flags 为
ConnectionRequired|IsWWAN|Reachable|TransientConnection
如果我关闭飞行模式,我会得到另一个 0,然后
Reachable
如果我关闭 WiFi 并启动 3G,结果是:
IsWWAN|Reachable|TransientConnection
似乎只检查Reachable
是不够的。但这里的逻辑是什么? ConnectionRequired
和 TransientConnection
是什么意思?
【问题讨论】:
【参考方案1】:如果存在 ConnectionRequired,则实际上没有连接,即使存在 Reachable 所以它就像
bool connectionAvailable = (flags.HasFlag(Reachable) && !flags.HasFlags(ConnectionRequired))
【讨论】:
【参考方案2】:引用文档:
ConnectionRequired
: 可达,但必须先有连接 成立。
TransientConnection
: 可以使用瞬态访问主机 连接(例如 PPP)。
Xamarin API Doc 和 ios Lib Doc
但你可能可以像下面的示例代码那样做:
https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs
它基本上检查Reachable && (!ConnectionRequired || IsWWAN)
。
【讨论】:
关于 xamarin 中系统配置的文档似乎消失了 他们更改了文档的地址。我更新了链接。 文档链接不存在。以上是关于如何解释 Xamarin.iOS 中的 NetworkReachabilityFlags?的主要内容,如果未能解决你的问题,请参考以下文章