iOS如何获得网络状态相关信息

作者: 子达如何 | 来源:发表于2016-07-16 13:04 被阅读1556次
  1. 运营商信息: 直接使用CTTelephonyNetworkInfo的服务即可获得运营商的名字, 运营商编码等信息. easy!
-(NSString *)currentCarrierName{
    CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
    CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];
    return [[NSString alloc] initWithFormat:@"%@_%@_%@_%@", [carrier carrierName], [carrier mobileCountryCode], [carrier mobileNetworkCode], [carrier isoCountryCode]];
}
  1. 当前网络类型(WiFi/4G) 信号强弱
    Google到的一个文章, 大致是访问statusBar的视图, 然后KVC访问该视图的属性, 从而得到想要的信息.
    文章没有提到如何获得信号强度, 不过, 顺着它的思路, 很快就找到了关键点:
类:**UIStatusBarDataNetworkItemView**, **UIStatusBarSignalStrengthItemView**
属性:**dataNetworkType**, **wifiStrengthBars**, **signalStrengthBars**

详细代码如下:

-(NSString *)currentNetworkType{
    NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews];
    
    NSNumber *dataNetworkItemView = nil;
    NSNumber *signalStrengthItemView = nil;
    for (id subview in subviews) {
        if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
            dataNetworkItemView = subview;
        }
        if ([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
            signalStrengthItemView = subview;
        }
        if (dataNetworkItemView && signalStrengthItemView) {
            break;
        }
    }
    
    if (!dataNetworkItemView) {
        return nil;
    }
    
    NSNumber *networkTypeNum = [dataNetworkItemView valueForKey:@"dataNetworkType"];
    NSNumber *wifiStrengthBars = [dataNetworkItemView valueForKey:@"wifiStrengthBars"];
    NSNumber *signalStrengthBars = [signalStrengthItemView valueForKey:@"signalStrengthBars"];
    if (!networkTypeNum) {
        return nil;
    }
    
    NSInteger networkType = [networkTypeNum integerValue];
    switch (networkType) {
        case 0:
            return @"No Service";
            break;
            
        case 1:
            return [[NSString alloc] initWithFormat:@"%@_%@", @"2G", signalStrengthBars];
            break;
            
        case 2:
            return [[NSString alloc] initWithFormat:@"%@_%@", @"3G", signalStrengthBars];
            break;
            
        case 3:
            return [[NSString alloc] initWithFormat:@"%@_%@", @"4G", signalStrengthBars];
            break;
            
        case 4:
            return [[NSString alloc] initWithFormat:@"%@_%@", @"LTE", signalStrengthBars];
            break;
            
        case 5:
            return [[NSString alloc] initWithFormat:@"%@_%@", @"WiFi", wifiStrengthBars];
            break;
        default:
            return [[NSString alloc] initWithFormat:@"%@_%@_%@", networkTypeNum, wifiStrengthBars, signalStrengthBars];
            break;
    }
}
  1. 授之以渔
    我是怎么知道上面说的这些类有什么可以访问的属性的呢?
    答案是借助一个杰出的开源库YYModel.
    当然, 自己用OC的runtime方法写也是可以的, 只是没有用YYModel已经封装好的方法方便.
#import "YYModel.h"
//...
    YYClassInfo *info = [YYClassInfo classInfoWithClass:[signalStrengthItemView class]];
    NSLog(@"dataNetworkItemView ivars:%@", info.ivarInfos);
    NSLog(@"dataNetworkItemView properties:%@", info.propertyInfos);
    NSLog(@"dataNetworkItemView method:%@", info.methodInfos);
  1. 结束:)

相关文章

  • iOS如何获得网络状态相关信息

    运营商信息: 直接使用CTTelephonyNetworkInfo的服务即可获得运营商的名字, 运营商编码等信息....

  • Docker CheetSheet

    使用演示 获得帮助 创建 & 运行 状态 & 信息 网络管理 清理

  • linux学习笔记-04系统状态相关

    系统状态检查命令 网络相关 ifconfig用于获取网卡配置与网络状态等信息,格式为 ifconfig [网络设备...

  • iOS网络请求相关框架的使用

    iOS网络请求相关框架的使用 iOS网络请求相关框架的使用

  • iOS 状态栏

    1.什么是状态栏? iOS顶部的那一条显示网络、信号、电池等手机状态信息的一栏就是状态栏。 2.如何获取状态栏的高...

  • netstat笔记

    用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masque...

  • 作为 iOS 开发者,怎能不 follow 这52个牛人

    对于每位 iOS 开发者来说,Twitter是个获得最新 iOS 开发技术和相关信息的好地方。如果你刚好有 Twi...

  • netstat显示各种网络相关信息—命令详解

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statisti...

  • netstat命令

    Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistic...

  • netstat命令

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statisti...

网友评论

  • 子达如何:看到有评论说有影响AppStore上架的风险,大家还是谨慎使用吧。
  • yuanweiphone:检测vpn会出问题,判断vpn时,先关闭vpn,进入应用后,再开启vpn,点击按钮打印出来还是未开启
  • 还请另换一个:iphoneX 上如何适配?
    子达如何:这个问题很好,注意阅读以下“3.授之以渔“看看是否能解决问题。期待你的发现。
  • 貓秋:请问这个是苹果的私有方法吗?会影响上架不?
    子达如何:@青山流水 多谢提醒,我们之前的APP已经倒闭了,没跟进最新的情况了。现在这个方法不行了,你们有什么新方法了么?
    188baaafd568:会影响苹果审核的,我们应用就因为调用此方法被拒。
    子达如何:@chauvet 不算私有API,kvo用法也是标准的,目前,我们上架了两个app都没有问题。
  • 子达如何:不确定这样做是否涉及AppStore审核的问题~
    和女神经常玩:你好,请问如何获取iPad的wifiStrengthBars

本文标题:iOS如何获得网络状态相关信息

本文链接:https://www.haomeiwen.com/subject/xukujttx.html