Question

In iPhone 5S WiFi detected as 3G and in my iPhone 4 it's normal. Both in iOS 7.1.

In some devices it happens as well.

WiFi disabled and 3G connected, I double checked to see if internet connection is ok and indeed it's ok in device itself.

Any idea why?

Edit 1:

Code below:

- (void)registerReachabilityNotification
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetworkStatus:)
                                                 name:kReachabilityChangedNotification object:nil];

    Reachability *reach = [Reachability reachabilityForInternetConnection];
    [reach startNotifier];

    NSNotification *note = [[NSNotification alloc] initWithName:kReachabilityChangedNotification object:reach userInfo:nil];
    [self checkNetworkStatus:note];
}

- (void)checkNetworkStatus:(NSNotification*)notification
{
    Reachability *reach = notification.object;
    NSParameterAssert([reach isKindOfClass: [Reachability class]]);

    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"No internet connection.");
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            break;
        }
    }
}

Edit 1:

This code:

NetworkStatus nStats = [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus];

    if (nStats != ReachableViaWiFi) {
        NSLog(@"nStats != ReachableViaWiFi");
    }

    if (nStats == ReachableViaWiFi) {
        NSLog(@"WIFI");
    }
    else if (nStats == ReachableViaWWAN) {
        NSLog(@"WWAN");
    }
    else if (nStats == NotReachable) {
        NSLog(@"not reachable");
    }
    else {
        NSLog(@"undetermined reachability.");
    }

Give me this:

Reachability Flag Status: WR t------ localWiFiStatusForFlags
nStats != ReachableViaWiFi
not reachable
Was it helpful?

Solution

My method was completely wrong, below code for correct way:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"CONNECTION: %@", NSStringFromNetworkStatus([MobileControlHandler checkConnection]));
    return YES;
}

+ (NetworkStatus)checkConnection
{
    NetworkStatus wifiStatus = [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus];
    NetworkStatus internetStatus = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus];

    if (wifiStatus == ReachableViaWiFi) {
        return ReachableViaWiFi;
    }
    else if (wifiStatus != ReachableViaWiFi && internetStatus == ReachableViaWWAN) {
        return ReachableViaWWAN;
    }
    else {
        return NotReachable;
    }
}

FOUNDATION_EXPORT NSString *NSStringFromNetworkStatus(NetworkStatus netStatus)
{
    if (netStatus == ReachableViaWiFi) {
        return @"ReachableViaWiFi";
    } else if (netStatus == ReachableViaWWAN) {
        return @"ReachableViaWWAN";
    } else if (netStatus == NotReachable) {
        return @"NotReachable";
    } else {
        return @"Undetermined reachbility flag";
    }
}

Plot:

Reachability Flag Status: WR t------ localWiFiStatusForFlags
Reachability Flag Status: WR t----l- networkStatusForFlags
CONNECTION: ReachableViaWWAN

OTHER TIPS

Just download new Reachability class from Apple https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

it will work on ios 8 too.

For more interacting things about iOS app development, Checkout https://appengineer.in/

#import <Reachability.h>

It's a singleton so you can start using it right away.

Ex:

if ([Reachability currentReachabilityStatus] == NotReachable) {
  ...
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top