iOS7+ 获取网络类型
2016-06-21 11:33
651 查看
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "MXGetNetType.h"
@implementation MXGetNetType
+(NSString *)GetNetWorkType
{
NSString *strNetworkType =
@"";
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
struct sockaddr_storage zeroAddress;
bzero(&zeroAddress,
sizeof(zeroAddress));
zeroAddress.ss_len =
sizeof(zeroAddress);
zeroAddress.ss_family =
AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability =SCNetworkReachabilityCreateWithAddress(NULL, (structsockaddr
*)&zeroAddress);
SCNetworkReachabilityFlags flags;
//获得连接的标志
BOOL didRetrieveFlags =
SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
//如果不能获取连接标志,则不能连接网络,直接返回
if (!didRetrieveFlags)
{
return strNetworkType;
}
//没有网络
if ((flags &
kSCNetworkReachabilityFlagsReachable) == 0)
{
return @"";
}
if ((flags &kSCNetworkReachabilityFlagsConnectionRequired) ==0)
{
// if target host is reachable and no connection is required
// then we'll assume (for now) that your on Wi-Fi
strNetworkType = @"WIFI";
}
if (
((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) !=0) ||
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) !=0
)
{
// ... and the connection is on-demand (or on-traffic) if the
// calling application is using the CFSocketStream or higher APIs
if ((flags &kSCNetworkReachabilityFlagsInterventionRequired) ==0)
{
// ... and no [user] intervention is needed
strNetworkType = @"WIFI";
}
}
if ((flags &kSCNetworkReachabilityFlagsIsWWAN) ==kSCNetworkReachabilityFlagsIsWWAN)
{
if ([[[UIDevicecurrentDevice]systemVersion]floatValue]
>=7.0)
{
CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfoalloc]init];
NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
if (currentRadioAccessTechnology)
{
if ([currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyLTE])
{
strNetworkType = @"4G";
}
else
if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyGPRS])
{
strNetworkType = @"2G";
}
else
{
strNetworkType = @"3G";
}
}
}
else
{
if((flags &kSCNetworkReachabilityFlagsReachable) ==kSCNetworkReachabilityFlagsReachable)
{
if ((flags &kSCNetworkReachabilityFlagsTransientConnection) ==kSCNetworkReachabilityFlagsTransientConnection)
{
if((flags &kSCNetworkReachabilityFlagsConnectionRequired) ==kSCNetworkReachabilityFlagsConnectionRequired)
{
strNetworkType = @"2G";
}
else
{
strNetworkType = @"3G";
}
}
}
}
}
if ([strNetworkType
isEqualToString:@""]) {
strNetworkType = @"WWAN";
}
NSLog(@"GetNetWorkType() strNetworkType : %@", strNetworkType);
return strNetworkType;
}
@end
#import "MXGetNetType.h"
@implementation MXGetNetType
+(NSString *)GetNetWorkType
{
NSString *strNetworkType =
@"";
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
struct sockaddr_storage zeroAddress;
bzero(&zeroAddress,
sizeof(zeroAddress));
zeroAddress.ss_len =
sizeof(zeroAddress);
zeroAddress.ss_family =
AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability =SCNetworkReachabilityCreateWithAddress(NULL, (structsockaddr
*)&zeroAddress);
SCNetworkReachabilityFlags flags;
//获得连接的标志
BOOL didRetrieveFlags =
SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
//如果不能获取连接标志,则不能连接网络,直接返回
if (!didRetrieveFlags)
{
return strNetworkType;
}
//没有网络
if ((flags &
kSCNetworkReachabilityFlagsReachable) == 0)
{
return @"";
}
if ((flags &kSCNetworkReachabilityFlagsConnectionRequired) ==0)
{
// if target host is reachable and no connection is required
// then we'll assume (for now) that your on Wi-Fi
strNetworkType = @"WIFI";
}
if (
((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) !=0) ||
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) !=0
)
{
// ... and the connection is on-demand (or on-traffic) if the
// calling application is using the CFSocketStream or higher APIs
if ((flags &kSCNetworkReachabilityFlagsInterventionRequired) ==0)
{
// ... and no [user] intervention is needed
strNetworkType = @"WIFI";
}
}
if ((flags &kSCNetworkReachabilityFlagsIsWWAN) ==kSCNetworkReachabilityFlagsIsWWAN)
{
if ([[[UIDevicecurrentDevice]systemVersion]floatValue]
>=7.0)
{
CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfoalloc]init];
NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
if (currentRadioAccessTechnology)
{
if ([currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyLTE])
{
strNetworkType = @"4G";
}
else
if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyGPRS])
{
strNetworkType = @"2G";
}
else
{
strNetworkType = @"3G";
}
}
}
else
{
if((flags &kSCNetworkReachabilityFlagsReachable) ==kSCNetworkReachabilityFlagsReachable)
{
if ((flags &kSCNetworkReachabilityFlagsTransientConnection) ==kSCNetworkReachabilityFlagsTransientConnection)
{
if((flags &kSCNetworkReachabilityFlagsConnectionRequired) ==kSCNetworkReachabilityFlagsConnectionRequired)
{
strNetworkType = @"2G";
}
else
{
strNetworkType = @"3G";
}
}
}
}
}
if ([strNetworkType
isEqualToString:@""]) {
strNetworkType = @"WWAN";
}
NSLog(@"GetNetWorkType() strNetworkType : %@", strNetworkType);
return strNetworkType;
}
@end
相关文章推荐
- C++网络编程服务器select模型(参考)
- Android初级教程理论知识(第八章网络编程二)
- Android初级教程理论知识(第八章网络编程二)
- Java网络编程
- 如何使用iOS实现视频的直播、点播、缓存?-HTTP Live Streaming (HLS)
- RHEL7.0 配置网络IP的三种方法
- Retrofit网络请求入门
- android OkHttp 上传文件附带参数
- UNIX网络编程笔记(6)—UDP网络编程
- 网络杂碎知识
- 四种常见的 POST 提交数据方式
- 网络管理
- win7连接网络打印机需要输入网络密码,怎么办
- IT十八掌掌第十六天课程总结
- 广播接受-网络状态查询
- 转: https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL
- TCP与UDP区别
- Deep Learning(深度学习)之(十)神经网络在机器学习分类任务中的应用
- 【网络安全】What is a Digital Signature?
- 报错AttributeError: 'module' object has no attribute 'HTTPSConnection'