我正在编写一个通过 WiFi 连接到专有设备的应用程序。专有设备充当 WiFi 接入点。
正如我所料,当设备断电时,WiFi 连接将终止。
iPhone 继续发送探测请求,寻找要连接的网络。它遵循用于发送探测的指数退避算法。
我的问题是最终 iPhone 发送的探测请求之间的间隔比我设备上的超时时间长,所以它们没有建立连接。
我正在使用可达性代码,它按我的预期工作。
似乎按下主页按钮将重置退避并立即发送探测请求。有谁知道让我的应用程序做类似事情的方法?
谢谢你的帮助。
不是每次都使用 Reachability ping 互联网,而是 ping 本地网络上的主机,例如 DNS 服务器或路由器 (192.168.1.1)。
我怀疑如果您在应用程序中重新配置连接(重新设置 WiFi 配置),iPhone 将在没有退避的情况下重新开始扫描。因此,您的应用程序可以跟踪连接丢失后的时间,然后在适当的时间后重新配置链接。可能您必须重新配置为不同的 SSID,然后再切换回来,具体取决于 iOS 库的智能程度。
我不舒尔,如果我理解你的话。您想检查设备是否仍连接到接入点?
我已经构建了一个应用程序来通过 wifi 连接到扫描仪,扫描仪充当接入点。为此,我检查设备当前连接的 SSID 是否是扫描仪之一。要检查 CurrentSSID,您可以使用以下代码:
+(NSString*)currentSSID {
CFArrayRef myArray = CNCopySupportedInterfaces();
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
if (!myDict) {
return nil;
}
NSDictionary *myDictionary = (__bridge_transfer NSDictionary*)myDict;
return [myDictionary objectForKey:@"SSID"];
}
希望有帮助。
恐怕没有办法在审核期间不被拒绝(您可以阅读如何访问SBWifiManager
)。Apple 不启用任何方式从沙盒环境访问 wifi 管理器。我在将我的设备连接到各种接入点(使用探测请求进行定位)时遇到了类似的问题,到目前为止,在 iOS 7 中,探测请求是在很长的间隔(甚至 15 分钟)之间发送的。尝试修改您的接入点。
我以某种方式遇到了类似的情况,以检查设备是否连接在特定的 VPN 连接中。该方法是通过标准 ping或实现 ping Web 服务 ping 到本地网络中的机器。
如果您的本地网络中没有后端,那么最简单的方法就是 ping。您可以从 Apple 开发者网站查看以下代码示例:http: //developer.apple.com/library/mac/#samplecode/SimplePing/Introduction/Intro.html