我能否在任何情况下阻止iPhone使用3G?

12

我正在编写一款旅游指南相关的应用程序,将下载大型数据库(60兆字节),可能在海外进行。通过可达性代码,我可以确定当主机通过WiFi或3G可达时,但我担心如果由于某种原因WiFi连接断开了一分钟左右(某些DSL连接偶尔可能会发生),iPhone将自动透明地切换到3G,并且不知不觉中我可能会让某人的手机账单增加海外数据费用!

所以我想知道,如果WiFi连接中断(WiFi仍然工作,但与网络的连接已断开),是否有人有任何经验,可达性代码是否会报告ReachableViaWWAN?这样,我可以等待我的下载代码返回,检查主机当前是如何可达的,如果是通过3G,我就可以中止操作吗?

是否可以选择使用哪种类型的连接,如仅限3G或WiFi?


3
看到一个开发者关心不损害他的用户真是太好了。点个赞。 - samoz
1
如果您可以控制使用哪个网络,或许可以将其设置为用户可配置的选项。有些人可能不介意在需要时回退到3G(例如,他们拥有新的2GB计划并且不介意下载60MB)。 - Jeff
1
它旨在为用户配置,但如果他们说“不允许使用3G进行下载”,我必须有一种实现方式。 - dageshi
4个回答

5
如果您查看可达性示例,在Reachability.h中,有一个常量被定义为“kReachabilityChangedNotification”。如果您请求通知更改 - 假设它的功能与其名称相符 - 您可以在连接降至3G时停止连接。

是的,从阅读资料来看,这似乎是唯一的方法。我猜只需要进行大量的调试来测试它是否按预期工作。 - dageshi

1
在“设置-常规-网络”中,存在“数据漫游”选项。这允许您在国际旅行时关闭漫游到其他数据网络。用户已经有选择是否允许在旅行时使用昂贵的3G连接的权利。

1
啊,好的,那可能很方便。 - dageshi
你说得对,我总是把它关掉,因为我靠近边境。 - progrmr

0

是的,在设置->常规->网络下,您可以关闭3G。但是iPhone仍会使用非3G蜂窝数据。

另外,当我出国旅行时,我会将iPhone设置为飞行模式,然后手动开启Wi-Fi。


我认为OP是在问他们是否可以像Skype应用程序一样从应用程序内以编程方式禁止3G数据。 - Gordon Fontenot
好的,表达不够清晰,但第二遍阅读后我认为你是正确的。 - E.J. Brennan
是的,但感谢你告诉我在飞行模式下也可以打开WiFi。 - dageshi

0

不行,Unix风格的IP不是这样工作的。使用可达性代码大多会做正确的事情,但在处理通知之前仍有可能发送一些数据包到3G。

可以安全地假设不关闭“数据漫游”的用户会非常快速地这样做。另一方面,许多用户没有无限的互联网计划。

一个选项是显示类似“未连接到Wi-Fi,您是否想通过蜂窝网络下载大量数据?您可能会被收费。”并将其存储在设置中。


FYI,AT&T正在转向有限数据计划,如果您每月使用不超过2G,则价格更便宜(我自己从未接近过)。无限账户目前已经过时,但新账户将具有1G或2G的限制,之后每个G的费用为10美元,并且每月有一个费用上限。 - David Thornley

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