首页 文章

iOS WiFi探测间隔

提问于
浏览
22

我正在编写一个通过WiFi连接到专有设备的应用程序 . 专有设备充当WiFi接入点 .

当设备断电时,WiFi连接会终止,正如我所料 .

iPhone继续发送探测请求,寻找要连接的网络 . 它遵循用于发送探测的指数退避算法 .

我的问题是,最终iPhone发送的探测请求之间的间隔时间长于我设备上的超时,因此它们不会 Build 连接 .

我正在使用Reachability代码,它可以像我期望的那样工作 .

似乎按下主页按钮将重置退避并立即发送探测请求 . 有谁知道如何让我的应用程序做类似的事情?

谢谢你的帮助 .

5 回答

  • 0

    不是每次使用可达性ping互联网,而是ping本地网络上的主机,如DNS服务器或路由器(192.168.1.1) .

  • 0

    我以某种方式经历了类似的情况来检查设备是否在特定的VPN连接中连接 . 方法是通过标准ping或实施ping Web服务ping到本地网络中的计算机 .

    如果您的本地网络中没有后端,那么最简单的就是ping . 您可以从Apple开发人员站点查看以下代码示例:http://developer.apple.com/library/mac/#samplecode/SimplePing/Introduction/Intro.html

  • 0

    我怀疑如果你重新配置你的应用程序中的连接(重新设置WiFi配置),iPhone将重新开始扫描而不退避 . 因此,您的应用可以跟踪连接丢失后的时长,然后在适当的时间后重新配置链接 . 可能你需要重新配置到不同的SSID然后切换回来,这取决于iOS库的智能程度 .

  • 1

    如果我理解你的话,我并不害羞 . 您想检查设备是否仍然连接到接入点?

    我已经构建了一个通过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"];    
    }
    

    希望有所帮助 .

  • 0

    我担心在审查期间没有被拒绝的情况下没有办法这样做(你可以阅读如何访问 SBWifiManager ) . Apple无法以任何方式从沙箱环境访问wifi管理器 . 我经历了将我的设备连接到各种接入点(用于定位探测请求)的类似问题,到目前为止,iOS 7探测请求是在很长的间隔(甚至15分钟)之间发送的 . 尝试修改您的接入点 .

相关问题