美文网首页
iOS网络状态的获取

iOS网络状态的获取

作者: 码农耕 | 来源:发表于2019-04-04 16:30 被阅读0次
iOS网络状态的获取

首先什么时候要用的网络?(这段是废话)

    iOS在什么时候要用到网络,当你和后台交互(访问数据,下载,上传等等)的时候就要用到网络请求,具体如何请求这里不做累赘。

    很多时候,我们都要获取手机的网络状态,比如,后台需要知道APP的网络状态,APP需要根据网络状态去显示不同质量的图片或用于判断是否自动播放多媒体等等;还有就是判断APP是否连接了网络否则可能某些地方会出bug。

如何获取网络状态

    目前主流的三种方式:Reachability(苹果官方提供的示例源码)、AFN、系统状态栏

前面两种不累述

1、Reachability

2、AFN

3、系统状态栏获取

```

    UIApplication *app = [UIApplication sharedApplication];

    NSArray*children;

    if([[app valueForKeyPath:@"_statusBar"] isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {

        children = [[[[appvalueForKeyPath:@"_statusBar"] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];

    }else

    {

        children = [[[appvalueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];

    }

    NSString*state = [[NSStringalloc]init];

    intnetType =0;

    //获取到网络返回码

    for(idchildinchildren) {

        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {

            //获取到状态栏

            netType = [[childvalueForKeyPath:@"dataNetworkType"]intValue];

            switch(netType) {

                case0:

                    state =@"";  // 无网络模式不会进入这里, 无上面那个@"UIStatusBarDataNetworkItemView"

                    //无网模式

                    break;

                case1:

                    state =@"2G";

                    break;

                case2:

                    state =@"3G";

                    break;

                case3:

                    state =@"4G";

                    break;

                case5:

                {

                    state =@"WIFI";

                }

                    break;

                default:

                    break;

            }

        }

    }

```

注意:状态栏获取的坑:1.状态栏隐藏的时候获取不到;2.iPhone X以后的机型状态栏结构不一样也会有问题。

具体怎么用

    前面两种的原理是通过访问网络,去判断网络状态,

相关文章

网友评论

      本文标题:iOS网络状态的获取

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