iphone SDK检测Wifi和运营商网络
Posted
技术标签:
【中文标题】iphone SDK检测Wifi和运营商网络【英文标题】:iphone SDK detect Wifi and Carrier network 【发布时间】:2010-12-10 03:45:14 【问题描述】:我的应用程序访问互联网,我只想检测是否存在通过 wifi 或运营商数据网络的连接
苹果已经为“可达性”做了一个例子
https://developer.apple.com/iphone/library/samplecode/Reachability/
我认为它只是检测到 wifi 而不是运营商网络
谁能告诉我,检测是否存在连接(任何类型的连接)的最佳方法是什么
感谢您的帮助!
【问题讨论】:
那有点老了。 Tony Miller 有一个更新版本的 Reachability,我用过 here 【参考方案1】:该样本正是您所需要的。
查看 Reachability.m。它会告诉你是否有任何联系,然后告诉你你有什么样的联系。
【讨论】:
更具体地解决您的问题:可达性代码将检测任何类型的连接,而不仅仅是 WiFi。您所要做的就是将 Reachability 类导入您的项目,然后实例化一个 Reachability 对象并从那里开始。【参考方案2】:如果您只想检测您是否已连接,以及如果您已连接,您使用的是什么类型的连接,那么 Reachability 示例可能有点过分。实际上,该示例还包含显示如何设置和使用通知您状态更改的回调的代码。
对于源代码的 sn-p,可以准确地告诉您您是否已连接,以及您使用的是什么类型的连接,您可能想看看我对类似问题的回答,发布在 here。
【讨论】:
【参考方案3】:一旦你向任何网络资源发出请求,iPhone 就会使用它找到的任何连接,它会使用 wifi(作为更高的优先级),如果 wifi 未连接,它会使用运营商网络。 没有阻止运营商网络的代码设置。
所有你需要做的:
在测试地点检查信号。 在 safari 上检查您尝试访问的链接,确保不是您的应用有问题。 如果链接在 safari 上无效(确保使用运营商网络),请联系您的运营商支持【讨论】:
【参考方案4】:这些技术很有用,但请记住,设备到 Internet 的路径可能包含几种不同类型的连接。例如,iPhone 或 iPod touch 可能正在使用 WiFi 连接到移动热点,而移动热点又拥有自己的 3G 无线连接。因此,假设 WiFi 连接的存在意味着比 3G 更高的带宽是不安全的。
【讨论】:
【参考方案5】:Reachability(Apple 的示例代码和其他人的类似代码,以及底层的 SCNetworkReachability 都会告诉您没有互联网接入,或者您将通过 WiFi 接入互联网,或者您将通过移动设备接入互联网数据。
如果您有可用的 WiFi 和移动数据,它会告诉您“WiFi”。当您有 WiFi 时,无法确定移动数据是否可用。 (在没有 WiFi 的情况下,您可以轻松发现移动数据可用)。您无法确定飞行模式是否已打开(这与 WiFi 和移动数据关闭不同)。
WiFi 可用不保证下载将使用 WiFi 而不是移动数据。你可能在家里开始下载,一分钟后离开,WiFi 消失,ios 会愉快地继续通过 3G 下载。您可以在下载调用中设置一个标志以禁止 3G。错误代码将是 -1009 = 无法访问互联网,没有提及 3G 可用。
使用 CTTelephonyNetworkInfo,您可以发现您使用的设备可能有移动数据(不是没有移动数据的 iPod Touch 或 iPad,并且设备中有 SIM)。
【讨论】:
以上是关于iphone SDK检测Wifi和运营商网络的主要内容,如果未能解决你的问题,请参考以下文章