iOS网络监测如何区分2、3、4G?
2024-08-28 02:47:13
你可以在Github下载这个Demo
首先,引入系统的Reachability类,不知道怎么引入的话,在Xcode,按下shift+command+0,搜索Reachability,看到图中所选的工程下载即可。
Reachability.png
并导入相关.h文件
#import<CoreTelephony/CTTelephonyNetworkInfo.h>
引入后,Reachability.h文件里面修改NetworkStatus的枚举,
typedef enum : NSInteger {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN,
kReachableVia2G,
kReachableVia3G,
kReachableVia4G
} NetworkStatus;
在修改下Reachability.m文件
找到
- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags
修改下面的代码
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];
NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
if (currentRadioAccessTechnology)
{
if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE])
{
returnValue = kReachableVia4G;
}
else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS])
{
returnValue = kReachableVia2G;
}
else
{
returnValue = kReachableVia3G;
}
return returnValue;
}
}
if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection)
{
if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired)
{
returnValue = kReachableVia2G;
return returnValue;
}
returnValue = kReachableVia3G;
return returnValue;
}
returnValue = ReachableViaWWAN;
}
如何使用?
在AppDelegate里加入
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//设置状态栏
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
// 监测网络情况
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
[hostReach startNotifier];
}
- (void)reachabilityChanged:(NSNotification *)note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus status = [curReach currentReachabilityStatus];
switch (status)
{
case NotReachable:
break;
case ReachableViaWiFi:
case ReachableViaWWAN:
break;
case kReachableVia2G:
break;
case kReachableVia3G:
break;
case kReachableVia4G:
break;
}
}
最新文章
- HYSBZ 2957 分块
- 《Visual C++并行编程实战》译者序
- MFC基本框架
- js算法
- Java Web整合开发(78) -- Struts 1
- Android Studio设置代理更新下载SDK
- idea右键无法生成javaclass
- 8分钟学会使用AutoMapper
- Vue2.0选中当前鼠标移入移除加样式
- 锦囊9-if语句
- keepalived的vip无法ping通【原创】
- 利用shell简单监控网络设备的接口状态发出告警
- 【原创】大数据基础之Flume(2)kudu sink
- I2S音频总线学习
- 第三个Sprint冲刺第3天
- 异常:分为 严重性错误:Error 异常:Exception
- SPring cloud (3)A Ribbon 负载均衡 配置初步
- Hadoop的HDFS和MapReduce的安装(三台伪分布式集群)
- 03 Go 1.3 Release Notes
- Netdata Linux下性能实时监测工具