广告
返回顶部
首页 > 资讯 > 精选 >怎么在IOS中判断当前网络状态
  • 427
分享到

怎么在IOS中判断当前网络状态

2023-06-14 12:06:02 427人浏览 独家记忆
摘要

怎么在iOS中判断当前网络状态?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. Reachability这是苹果的官方演示demo中使用到的方法,我们可以到苹果官方文档里下载

怎么在iOS中判断当前网络状态?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. Reachability

这是苹果的官方演示demo中使用到的方法,我们可以到苹果官方文档里下载Demo(点击左上角Download Sample Code 即可下载),然后把Demo里的Reachability.h和.m考到自己项目中,并在Build Phases 的 Link Binary 添加SystemConfiguration.framework框架,然后在需要使用的地方导入Reachability头文件

在 Reachability头文件中我们可以看到无网络,wifi和蜂窝网三个网络状态的枚举值,如下:

typedef enum : NSInteger {    NotReachable = 0,    ReachableViaWiFi,    ReachableViaWWAN} NetworkStatus;

(1)获取网络状态

在iOS 7之前,当用户网络为蜂窝网络时,是没法判断3G、4G等网络类型的,iOS 7 后是可以判断的

(NSString *)internetStatus {    Reachability *reachability   = [Reachability reachabilityWithHostName:@"www.apple.com"];    NetworkStatus internetStatus = [reachability currentReachabilityStatus];    NSString *net = @"WIFI";    switch (internetStatus) {        case ReachableViaWiFi:            net = @"WIFI";            break;        case ReachableViaWWAN:            net = @"蜂窝数据";            //net = [self getNettype ];   //判断具体类型            break;        case NotReachable:            net = @"当前无网路连接";        default:            break;    }    return net;}

(2)当用户为手机自带网络时,判断具体网络类型

这时可以使用系统自带的api来判断是2G、3G还是4G,这就要使用到CTTelephonyNetworkInfo这类,记得在工程添加CoreTelephony.framework,并导入头文件

- (NSString *)getNetType{    CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];    NSString *currentStatus = info.currentRadioAccessTechnology;    if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyGPRS"]) {        netconnType = @"GPRS";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyEdge"]) {        netconnType = @"2.75G EDGE";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){        netconnType = @"3G";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){        netconnType = @"3.5G HSDPA";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){        netconnType = @"3.5G HSUPA";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){        netconnType = @"2G";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){        netconnType = @"3G";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){        netconnType = @"3G";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){        netconnType = @"3G";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){        netconnType = @"HRPD";    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyLTE"]){        netconnType = @"4G";    }}

用此方法判断的蜂窝网络类型有如下类型:

CTRadioAccessTechnologyGPRS         //介于2G和3G之间,也叫2.5G ,过度技术

CTRadioAccessTechnologyEdge         //EDGE为GPRS到第三代移动通信的过渡,EDGE俗称2.75G

CTRadioAccessTechnologyWCDMA

CTRadioAccessTechnologyHSDPA            //亦称为3.5G(3?G)

CTRadioAccessTechnologyHSUPA            //3G到4G的过度技术

CTRadioAccessTechnologyCDMA1x       //3G

CTRadioAccessTechnologyCDMAEVDORev0    //3G标准

CTRadioAccessTechnologyCDMAEVDORevA

CTRadioAccessTechnologyCDMAEVDORevB

CTRadioAccessTechnologyeHRPD        //电信使用的一种3G到4G的演进技术, 3.75G

CTRadioAccessTechnologyLTE          //接近4G

2. 通过系统statusBar判断

这种方法在iPhone X 上可能引起奔溃,可能是苹果修改了statusBar的keyPath,所以拿到的东西为nil,导致崩溃//获取当前网络状态  (iPhone X 上可能引发崩溃)

+ (NSString *)networkingStatesFromStatebar {    // 状态栏是由当前app控制的,首先获取当前app    UIApplication *app = [UIApplication sharedApplication];    //iphone X 会在这里崩溃    NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];    int type = 0;    for (id child in children) {        if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {            type = [[child valueForKeyPath:@"dataNetworkType"] intValue];        }    }    NSString *stateString = @"wifi";    switch (type) {        case 0:            stateString = @"notReachable";             break;        case 1:            stateString = @"2G";            break;        case 2:            stateString = @"3G";            break;        case 3:            stateString = @"4G";            break;        case 4:            stateString = @"LTE";            break;        case 5:            stateString = @"wifi";            break;        default:            break;    }    return stateString;}

3. 通过AFNetworking

此方法可以写在AppDelegate中,每当网络状态发生变化时,就可以发通知,实时监测网络变化,然后做相应的处理

#pragma mark - ------------- 监测网络状态 -------------- (void)monitorNetworking{    [[AFNetworkReachabilityManager sharedManager] startMonitoring];    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {        switch (status) {            case -1:                NSLog(@"未知网络");                break;            case 0:                NSLog(@"网络不可达");                break;            case 1:                {                NSLog(@"GPRS网络");                //发通知,带头搞事                [[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"1" userInfo:nil];                }            break;            case 2:                {                NSLog(@"wifi网络");                //发通知,搞事情                [[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"2" userInfo:nil];                }                break;            default:                break;        }        if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {            NSLog(@"有网");        }else{            NSLog(@"没网");        }    }];}

看完上述内容,你们掌握怎么在IOS中判断当前网络状态的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在IOS中判断当前网络状态

本文链接: https://www.lsjlt.com/news/270817.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在IOS中判断当前网络状态
    怎么在IOS中判断当前网络状态?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. Reachability这是苹果的官方演示demo中使用到的方法,我们可以到苹果官方文档里下载...
    99+
    2023-06-14
  • 详解IOS判断当前网络状态的三种方法
    在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定该干嘛。比如视频播放,需要线判断是Wifi还是4G,Wifi直接播放,4G先提示用户。获取网络状态的方法大概有三种...
    99+
    2022-05-21
    IOS 网络状态 wifi 2g 3g 4g
  • 如何使用JS在浏览器中判断当前网络连接状态
    这篇文章主要介绍如何使用JS在浏览器中判断当前网络连接状态,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用JS在浏览器中判断当前网络状态的几种方法如下:1. navigator.o...
    99+
    2022-10-19
  • iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi
    前言 5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了。 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API。...
    99+
    2022-06-05
    ios 判断 网络环境
  • Android中判断网络连接状态的方法
    App判断用户是否联网是很普遍的需求,实现思路大概有下面几种 利用Android自带的ConnectivityManager类 有时候连上了wifi,但这个wifi是上...
    99+
    2022-06-06
    连接 网络连接 方法 Android
  • Android应用中是如何判断网络状态的
    Android应用中是如何判断网络状态的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实例代码package com.example.android; import ja...
    99+
    2023-05-31
    android roi
  • Win10锁屏界面怎么移除当前的网络状态图标?
    在Win10的锁屏界面,右下角默认会有网络图标,用于指示当前网络状态。如果你感觉这个图标碍眼,可以使用我们的方法把它移除。需要注意的是,在这里移除后,里面的登录界面网络图标也会消失,那个图标点击后可以进行连接操作。 软媒...
    99+
    2023-05-21
    Win10 锁屏 网络
  • Android中监听判断网络连接状态的方法
    在无网或网速差的状态下,没必要去连接服务器。 你可以使用 ConnectivityManager 来判断是否连到网络,以及网络类型。 判断是否有网络连接 下面的代码用Conne...
    99+
    2022-06-06
    连接 网络连接 监听 方法 Android
  • Android中判断网络连接是否可用及监控网络状态
    获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。 <uses-permission android:name="android.permis...
    99+
    2022-06-06
    监控 连接 网络连接 Android
  • 怎么在JavaScript中判断日期是否大于当前日期
    这期内容当中小编将会给大家带来有关怎么在JavaScript中判断日期是否大于当前日期,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击...
    99+
    2023-06-14
  • linux中怎么判断当前用户是否是root
    这期内容当中小编将会给大家带来有关linux中怎么判断当前用户是否是root,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。linux 中,如何判断当前用户是否是root 呢? 判断当前用户是否是root ...
    99+
    2023-06-13
  • 怎么在CRM和C4C中判断当前是否处于configuration模式
    本篇内容介绍了“怎么在CRM和C4C中判断当前是否处于configuration模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CRMCL...
    99+
    2023-06-04
  • VB.NET中怎么并发性判断线程状态
    本篇文章为大家展示了VB.NET中怎么并发性判断线程状态,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。当用户在写出多线程程序的时候,可能***有挑战性的就是独立的线程和程序的其他的部分有并发性。例如...
    99+
    2023-06-17
  • CentOS中怎么查看网络状态
    今天就跟大家聊聊有关CentOS中怎么查看网络状态,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。查看网络状态:lsof -Pnl +M -i4 显示ipv4服务及监听端情况netst...
    99+
    2023-06-10
  • Android中怎么根据包名判断App运行状态
    这篇文章将为大家详细讲解有关Android中怎么根据包名判断App运行状态,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。背景可以根据 App 是否有 Service 分两类情况处理:① 没有...
    99+
    2023-05-30
    android
  • 怎么判断小程序的API回调参数组件是否在当前版本
    这篇文章主要讲解了“怎么判断小程序的API回调参数组件是否在当前版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么判断小程序的API回调参数组件是否在当前版本”吧!  wx.canIUs...
    99+
    2023-06-26
  • win7中怎么检测网速和网络连通状态
    小编给大家分享一下win7中怎么检测网速和网络连通状态,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用组合快捷键win键+r键打开运行窗口,输入“cmd”回车确...
    99+
    2023-06-28
  • Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题的解决方法
    在Android中,很多人会用如下的方法判断当前网络是否可用: public static boolean isNetworkAvailable() { boolean...
    99+
    2022-06-06
    空指针 方法 指针 Android
  • HTML中怎么使用iframe在当前网页中嵌入其他网页
    本文小编为大家详细介绍“HTML中怎么使用iframe在当前网页中嵌入其他网页”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中怎么使用iframe在当前网页中嵌入其他网页”文章能帮助大家解决疑惑,...
    99+
    2022-10-19
  • Android应用中怎么对网络连接状态进行监听
    这篇文章给大家介绍Android应用中怎么对网络连接状态进行监听,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。。...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作