0

我需要知道如何检测我通过true检查获得返回的 WiFi 状态,但实际上响应是由受人尊敬的 WIFI 服务器操纵的。isNetworkconnected()ConnectivityManager

假设我访问了某个 WIFI 是免费的地方,但我需要登录该网络才能访问,但与此同时,如果我在没有登录该 wifi 的情况下启动我的应用程序,我将通过 WIFI 连接返回trueConnectivityManager因为 android 只检查是否WIFI是否连接),以及来自该wifi主机的一些意外响应。

我怎样才能检测到这种连接?我已经看到在这种情况下运行了多个应用程序加载器,但是它们是如何检测到的呢?

4

1 回答 1

0

我认为您无法通过连接管理器进行测试。由于你所说的原因,结果总是不可靠的。

所以,在我看来,你有两个选择:

1)您像批准列表或其他东西一样测试Wi-Fi的SSID,如果用户不在该SSID上,您会提醒他们。

以下是获取当前连接路由器的 SSID 的方法(iOS 7+):

@import SystemConfiguration.CaptiveNetwork;

/** Returns first non-empty SSID network info dictionary.
 *  @see CNCopyCurrentNetworkInfo */
- (NSDictionary *)fetchSSIDInfo
{
    NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
    NSLog(@"%s: Supported interfaces: %@", __func__, interfaceNames);

    NSDictionary *SSIDInfo;
    for (NSString *interfaceName in interfaceNames) {
        SSIDInfo = CFBridgingRelease(
        CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName));
        NSLog(@"%s: %@ => %@", __func__, interfaceName, SSIDInfo);

        BOOL isNotEmpty = (SSIDInfo.count > 0);
        if (isNotEmpty) {
            break;
        }
    }
    return SSIDInfo;
}

2)我建议您忘记尝试使用这些标准方法测试 wi-fi,而在尝试使用 Wi-Fi 之前只需触发一个超时 3 秒的请求。如果你得到一个有效的响应,你就连接了,否则它就失败了。

于 2015-08-13T14:31:05.403 回答