我在严格识别iPhone的网络访问类型方面遇到了很多麻烦。我在StackOverflow上看过很多像这样的问题,但没有一个对我有帮助。例如,我已经看到了这一点:How to check for an active Internet connection on iOS or OSX?
但我想确切知道以下3个案例何时发生:
Wifi 和 3G已停用
启用了Wifi 或 3G,但没有互联网连接。这可能是由于3G没有真正起作用,即使它出现在状态栏上,或者WiFi是一个热点,要求在让您访问互联网或最后一个场景之前登录:WiFi源是本地网络但是不提供任何互联网连接。
一切正常
当然,我尝试过各种各样的东西,例如:
// Allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
// Set the blocks
reach.reachableBlock = ^(Reachability*reach)
{
/* NOT REACHABLE */
dispatch_async(dispatch_get_main_queue(), ^{
iarcSBInternetWarning.visible = NO;
});
};
reach.unreachableBlock = ^(Reachability*reach)
{
/* REACHABLE */
iarcSBInternetWarning.visible = YES;
};
// Start the notifier, which will cause the reachability object to retain itself
[reach startNotifier];
但这似乎只是说Wifi或3G是启用的,并没有检查可能的互联网限制。对于帮助我确定三种情景的任何答案,我都会非常高兴。
当然,分析从返回特定字节序列的个人服务器API的直接HTTP请求输出可以工作,但这不是我想要做的。我更喜欢使用任何类型的Reachability API。
我使用过Apple的可访问性API,它似乎无法识别热点重定向。
如果使用Reachability API无法做到这一点,那么向服务器发出简单请求的最低资源消耗方法是什么,检查它是否在指定的超时之前可以访问,并且URL未被重定向到热点登录页面(可能只检查标题,而不是整个服务器字节序列输出)?每15秒运行一次这样的脚本是一个好主意,还是会使用过多的电池和/或网络数据?
答案 0 :(得分:4)