iPhone SDK检测WiFi和运营商网络。

11

我的应用需要访问互联网,我希望能够检测是否有网络连接,无论是通过Wi-Fi还是运营商的数据网络。

苹果提供了一个例子"Reachability"。

https://developer.apple.com/iphone/library/samplecode/Reachability/

我认为它只能检测Wi-Fi而不能检测运营商网络。

有人能告诉我如何最好地检测是否有连接 ( 任何类型的连接 ) 吗?

感谢您的帮助!


1
这有点旧了。现在有一个更新版本的Reachability,由Tony Miller开发,我已经在这里使用过了。 - Martin Berger
5个回答

13

那个示例正是你所需的。

看看 Reachability.m。它会告诉你是否有网络连接,并告诉你你拥有什么类型的连接。


1
更具体地回答你的问题:Reachability 代码将检测 任何 类型的连接,而不仅仅是 WiFi。你只需要将 Reachability 类导入到你的项目中,然后实例化一个 Reachability 对象并开始使用即可。 - Tim

9

如果您只想检测是否已连接以及连接类型,那么使用“可达性(Reachability)”示例可能过于繁琐。实际上,该示例还包含了设置和使用回调通知状态更改的代码。

如果您只需要一小段源代码来告诉您是否已连接以及使用的连接类型,您可以查看我在类似问题上的答案,发布于此处


3

一旦您向任何网络资源发出请求,iPhone 将使用它找到的任何连接,优先使用 wifi 连接,如果没有连接 wifi,则使用运营商网络。

没有任何代码设置会阻止使用运营商网络。

您需要做的只有:

  • 检查测试地点的信号。
  • 在 Safari 上检查您正在尝试访问的链接,以确保问题不是出现在您的应用程序中。
  • 如果 Safari 上的链接无法工作(肯定是使用运营商网络),请联系您的运营商支持。

2

这些技术很有用,但请记住设备连接到互联网的路径可能由几种不同类型的连接组成。例如,iPhone或iPod touch可能使用WiFi连接到移动热点,而该热点又具有自己的3G无线连接。因此,不能安全地假设WiFi连接的存在意味着比3G更高的带宽。


0

可达性(包括苹果的示例代码和其他人类似的代码,以及底层的SCNetworkReachability)会告诉您是否有互联网访问,或者您将通过WiFi获得互联网访问,或者您将通过移动数据获得互联网访问。

如果您同时拥有WiFi和移动数据,则它会告诉您“WiFi”。当您使用WiFi时,无法找出移动数据是否可用。(当没有WiFi时,您可以轻松地发现移动数据是否可用)。您无法找出飞行模式是否已打开(这与关闭WiFi和移动数据不同)。

WiFi可用并不保证下载将使用WiFi而不是移动数据。您可能在家中开始下载,一分钟后离开,WiFi消失,iOS将愉快地继续通过3G下载。您可以在下载调用中设置一个标志来禁止3G。错误代码将为-1009 = 没有互联网访问,没有提到3G可用。

使用CTTelephonyNetworkInfo,您可以找出您正在使用的设备可能具有移动数据(不是没有移动数据的iPod Touch或iPad,并且设备中有SIM卡)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接