0

我需要检测设备是否连接到 WIFI:

reach = [Reachability reachabilityForLocalWiFi];
status = [reach currentReachabilityStatus];

但是当我在 iPad 上连接到 WIFI 时状态是 WWAN,并且没有插入 SIM 卡,我将用 SIM 卡测试状态。

有谁知道原因?

编辑:

刚用SIM卡试了一下,还是识别为ReachableViaWWAN,但是实际连接是通过3G(服务器只允许3G连接,WIFI会失败),所以我猜Reachability可能会随着时间的推移而变化?

4

3 回答 3

2

终于搞清楚了,我使用的Reachability类是ASIHTTPRequest的一部分,是一个修改版,修改的方式是重写了一个方法,但是旧的方法(同一个签名)没有去掉,这个直到我为项目中使用的 3RD 方库创建了一个静态库,它将方法声明与不适合修改后的可达性框架的旧方法链接起来,才产生麻烦(即调用新方法)。

于 2012-07-16T00:54:28.650 回答
1

可达性*可达性=[可达性可达性ForInternetConnection]; BOOL remoteHostStatus = [可达性 currentReachabilityStatus];

if (remoteHostStatus == ReachableViaWiFi || remoteHostStatus == ReachableViaWWAN)

{
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    NSMutableDictionary *dict                       =   [[NSMutableDictionary alloc] initWithObjectsAndKeys:textFieldUserName.text,@"email",textFieldpass.text,@"password", nil];
    objApp.responseData      = [[NSMutableData data]init];
    objApp.request           = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@login",mainUrl]]];
    NSData * requestBodyData                        =   [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
    objApp.request.HTTPMethod=     @"POST";
    [objApp.request setHTTPBody:requestBodyData];


    [objApp.request setTimeoutInterval:8.0f];
    // Create url connection and fire request
    objApp.connection = [[NSURLConnection alloc] initWithRequest:objApp.request delegate:self];
}
else
{
    [objApp alertViewFromApp:@"check internet connection of device"];
}
于 2014-09-16T06:08:04.650 回答
0

步骤1:-

导入系统配置

第2步:-

 //MARK:- Internet available or Not
public  static  func isConnectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
        SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
    }
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
        return false
    }
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

    return (isReachable && !needsConnection)
}

第 3 步:-

 if Global.isConnectedToNetwork() {

}

于 2016-11-02T05:02:21.923 回答