如何解释 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 是不够的。但这里的逻辑是什么? ConnectionRequiredTransientConnection 是什么意思?

【问题讨论】:

【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xamarin.ios 中的页面之间进行导航?

如何加载存在于 Xamarin.iOS 中的共享库项目中的第二个 Storyboard

如何在运行时折叠 Xamarin.iOS 中的视图?

Xamarin iOS:替换当前标签栏项目中的视图控制器

Xamarin IOS 蓝牙 LE 广告

如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息