我如何知道设备是否改变了网络?例如与这个用例:检测网络是否改变?
- 用户连接到Wi-Fi A.
- 用户开始我的应用程序。
- 用户连接到Wi-Fi B.(甚至3G)
- 用户恢复应用程序。
无论如何要通知应用程序,设备已从Wi-Fi A更改为Wi-Fi B吗?
我如何知道设备是否改变了网络?例如与这个用例:检测网络是否改变?
无论如何要通知应用程序,设备已从Wi-Fi A更改为Wi-Fi B吗?
苹果已经足够好为我们创建一个完整的样本。它被称为Reachability(Apple link)。下面是它的要点:
在.h文件中:
// declare Reachability, you no longer have a singleton but manage instances
Reachability* reachability;
在.m文件:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable)
{
NSLog(@"no");
}
else if (remoteHostStatus == ReachableViaWiFiNetwork)
{
NSLog(@"wifi");
}
else if (remoteHostStatus == ReachableViaCarrierDataNetwork)
{
NSLog(@"cell");
}
.....
- (void) handleNetworkChange:(NSNotification *)notice
{
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable)
{
NSLog(@"no");
}
else if (remoteHostStatus == ReachableViaWiFiNetwork)
{
NSLog(@"wifi");
}
else if (remoteHostStatus == ReachableViaCarrierDataNetwork)
{
NSLog(@"cell");
}
}
这似乎是从https://iostipsntricks.wordpress.com/2011/06/21/how-to-detect-handle-changes-in-network-from-3g-to-edge-to-wifi直接剽窃-in-您-IOS,应用/ – Alnitak 2016-06-28 17:28:16
Use Reachability in your Project Fetch the Networks Type
的SCNetworkReachability接口可以帮你。基本上,你创建一个所谓的可达性引用,然后调用SCNetworkReachabilityGetFlags来获取有关连接的信息。
这里是替代一个很好的降即ARC兼容 https://github.com/tonymillion/Reachability
正如其他人提到,在使用可达继承人link
我可能还没有得到具体的我的问题就好了。所以我会在这里的细节。我保持我的XMPP套接字连接在后台保持活动状态,我不断开它,所以当应用程序返回前台时,我可以再次使用它,并且不需要重新连接。现在,当用户更改网络时,如Wi-Fi A到Wi-Fi B,套接字连接现在无效。当应用程序处于后台时,可达性通知不起作用。在我的应用程序中没有后台执行,所以我猜,Reachability并不是真正的答案。 – jakerz 2013-03-14 02:31:47
我找到的解决方案是通过使用网络的BSSID,并在将应用程序放在后台时保存它,然后当我将应用程序放在前台时,我检查当前的BSSID,如果它不相同,我续订套接字连接。 – jakerz 2013-03-14 02:33:47