如何在iOS后台应用程序中检查连接是否已切换为3G?

4

当应用程序处于后台时,它是否可能知道连接是否已从Wi-Fi切换到3G?要求是下载应在Wi-Fi连接上进行。检查最初已完成,但我需要确认下载正在使用Wi-Fi进行并且如果用户在应用程序处于后台时切换到3G/4G,则应取消下载。


你的IP地址已经改变,下载不是已经被取消了吗? - JeanLuc
那么,如果我在后台保持一个长时间运行的下载过程,如果 Wi-Fi 断开并在几分钟后重新连接,我是否能够在后台自动开始下载? - Jacob Davis Cherussery
我不知道,试一下吧! - JeanLuc
2个回答

7
如果您只想确保下载仅在WiFi上进行,则应将NSURL会话的NSURLSessionConfigurationallowsCellularAccess属性设置为NO
不需要监视、取消或其他技巧:这将确保下载永远不会超过蜂窝连接。

0

我建议您使用这个库

它使用NSNotification,如果需要按照您的方式设置,您可以对其进行一些更改

以下是该库提供的示例代码

// Allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];

// Tell the reachability that we DON'T want to be reachable on 3G/EDGE/CDMA
reach.reachableOnWWAN = NO;

// Here we set up a NSNotification observer. The Reachability that caused the notification
// is passed in the object parameter
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(reachabilityChanged:) 
                                             name:kReachabilityChangedNotification 
                                           object:nil];

[reach startNotifier];

希望有所帮助。

在应用程序仍然在后台运行时,这个通知会可用吗? - Jacob Davis Cherussery
1
事实上,当应用程序在后台运行时,我没有使用该库,因为存在一些限制,但是请查看此处以了解该问题的解决方法https://dev59.com/DW435IYBdhLWcg3wlRQf。 - E-Riddie
我正在使用NSURLSession来下载文件。因此,该应用程序正在后台下载大型文件。 - Jacob Davis Cherussery
我查看了一些论坛和教程,它们都说 https://developer.apple.com/library/ios/documentation/StoreKit/Reference/NewsstandKit_Framework/_index.html 是用于在后台处理下载的框架,并且你可以自己操纵它来与 NSNotifications 协同工作。希望这能帮到你。 - E-Riddie

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