不用Reachability就可以果断判断用户2G/3G的方法

看到网上很多人都在用Reachability加工的方法来判断2G/3G状态,我也小试了一把,发现存在着不少问题,经常判断出来的状态是NULL,无法准确定位到用户是否使用的2G/3G。。
终于有一种新鲜可靠的方法出现了,不论用户是否隐藏了statusBar,都可以准确判断出用户网络情况,这个就是遍历StatusBar的图标。。。通过查看用户statusBar的网络图标的视图,然后根据视图的类型值来判断出是什么网络状态。(不过越狱的用户可以刷statusBar,没有测试过这个方法还可以不可以)

功能块的代码如下:
+ (NSString *)currentNetWorkStatusString
{
    NSString *netWorkStatus ;
    
    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;
            
        }
        
    }
    
    
    NSNumber * num = [dataNetworkItemView valueForKey:@"dataNetworkType"];
    
    if (num == nil) {
        
        
        netWorkStatus = nil;
        
        
    }else{
        
        int n = [num intValue];
        
        if (n == 0) {
            
            netWorkStatus = nil;
            
        }else if (n == 1){
            
            netWorkStatus = @"2G";
            
        }else if (n == 2){
            
            netWorkStatus = @"3G";
            
        }else{
            
            netWorkStatus = @"WiFi";
            
        }
        
    }
    return netWorkStatus;
    
}

你可能感兴趣的:(不用Reachability就可以果断判断用户2G/3G的方法)