我的应用程序访问互联网,我只想检测是否有通过 wifi 或运营商数据网络的连接

苹果为“可达性”做了一个例子

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

我认为它只检测wifi而不是运营商网络

谁能告诉我,最好做什么来检测是否有连接(任何类型的连接)

感谢你的帮助!

有帮助吗?

解决方案

该样本正是您所需要的。

看看Reachability.m。它会告诉你是否有任何联系,然后告诉你你有什么样的联系。

其他提示

如果您只想检测是否已连接,以及连接时使用的连接类型,则可访问性示例可能过度。实际上,该示例还包含显示如何设置和使用回调的代码,以便通知您状态更改。

对于一段源代码,告诉您确切的连接是否已连接,以及您正在使用的连接类型,您可能需要查看我对类似问题的回答,发布此处

一旦您向任何网络资源发出请求,iPhone 就会使用它找到的任何连接,它会使用 wifi(优先级更高),如果 wifi 未连接,它会使用运营商网络。没有任何代码设置会阻止运营商网络。

你所要做的就是:

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

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

可达性(Apple的示例代码和其他人的类似代码,以及底层的SCNetworkReachability将告诉您无法访问互联网,或者您将通过WiFi访问互联网,或者您将通过移动设备访问互联网数据。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top