IOS判断用户的网络类型(2/3/4G、wifi)
生活随笔
收集整理的這篇文章主要介紹了
IOS判断用户的网络类型(2/3/4G、wifi)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
直接貼代碼吧,ios7之后是獲取的較為準(zhǔn)確,7以下我拿iphone5測(cè)試的是無(wú)法區(qū)分3g/2g。連iphone4都能升到7.1.4,而且目前主流的設(shè)備7以下的系統(tǒng)已經(jīng)很少了,這個(gè)方案盡管不太完美,但影響不會(huì)太大
?
#import <CoreTelephony/CTTelephonyNetworkInfo.h>?
string GetNetWorkType()
{
??? string strNetworkType = "";
???
??? //創(chuàng)建零地址,0.0.0.0的地址表示查詢本機(jī)的網(wǎng)絡(luò)連接狀態(tài)
??? 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, (struct sockaddr *)&zeroAddress);
??? SCNetworkReachabilityFlags flags;
???
??? //獲得連接的標(biāo)志
??? BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
??? CFRelease(defaultRouteReachability);
???
??? //如果不能獲取連接標(biāo)志,則不能連接網(wǎng)絡(luò),直接返回
??? if (!didRetrieveFlags)
??? {
??????? return strNetworkType;
??? }
???
???
??? 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 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
??????? {
??????????? CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];
??????????? NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
???????????
??????????? if (currentRadioAccessTechnology)
??????????? {
??????????????? if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE])
??????????????? {
??????????????????? strNetworkType =? "4G";
??????????????? }
??????????????? else?if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString: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 == "") {
??????? strNetworkType = "WWAN";
??? }
???
??? NSLog( @"GetNetWorkType() strNetworkType :? %s", strNetworkType.c_str());
???
??? return strNetworkType;
}
?
參考鏈接:
http://blog.csdn.net/justinjing0612/article/details/8741261
http://www.jianshu.com/p/efcfa3c87306
http://www.cnblogs.com/xiaohuzi1990/p/4341655.html
總結(jié)
以上是生活随笔為你收集整理的IOS判断用户的网络类型(2/3/4G、wifi)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Skype for Business S
- 下一篇: asp.net 利用多表联合查询进行汇总