How to determine whether user is on Edge or 3G on iPhone

前端 未结 4 1155

Though it is relatively straightforward to determine if an iPhone is on Wifi or a data network programmatically in your application, I can\'t figure out a way to determine i

相关标签:
4条回答
  • 2020-12-18 02:41

    The iPhone doesn't provide this kind of information to developers programmatically. The best you can hope for is to determine whether a connection to a given host will have to be routed over a cell network - see the SCNetworkReachability reference and the Reachability project for more.

    0 讨论(0)
  • 2020-12-18 02:47

    Assuming the answer by Tim is right, one way you can tell if the user is on 3G or edge is you can test the speed of the connection by starting a timer having the app download some file from the web and calculate the speed, you should be able to tell if they are on 3G or Edge by the diffrence in speeds.

    0 讨论(0)
  • 2020-12-18 02:52

    Try checking it from the status bar:

    UIApplication *app = [UIApplication sharedApplication];
    NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"]    subviews];
    NSNumber *dataNetworkItemView = nil;
    
    for (id subview in subviews) {
        if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
            dataNetworkItemView = subview;
            break;
        }
    }
    int connectivity;
    connectivity =  [dataNetworkItemView valueForKey:@"dataNetworkType"];
    

    And the value keys I've found so far:

    0 = No wifi or cellular
    
    1 = 2G and earlier? (not confirmed)
    
    2 = 3G? (not yet confirmed)
    
    3 = 4G
    
    4 = LTE
    
    5 = Wifi
    
    0 讨论(0)
  • 2020-12-18 03:04

    one way you can detect iPhone 2G for sure is to look at the device name as reported by the OS

    #import <sys/utsname.h>
    + (NSString *)deviceType {
        struct utsname u;
        uname(&u);
        NSString *returnValue = [NSString stringWithFormat:@"%s", u.machine];
    
        return returnValue;
    }
    

    the return value you are looking for is "iPhone1,1" to indicated iPhone 2G. combine this with the Reachability project to tell when they're on a cell network and you you have 1 avenue to guarantee that they are on an edge connection

    0 讨论(0)
提交回复
热议问题