iPhone开发 判断当前的网络
2014-07-08 13:15
253 查看
一、使用Reachability判断WIFI还是3G
http://www.oschina.net/code/snippet_54100_9071
1.添加framework:
将SystemConfiguration.framework 添加进工程。
2.下载 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
复制里面的Reachability.h和Reachability.m到项目中
二、使用currentRadioAccessTechnology获取具体的网络类型:LTE/WCDMA/GPRS等
http://www.tuicool.com/articles/FJzMRn
Apple的 Reachability
Sample 看起来不错,但是只可以判断是否连接到互联网和是否连接Wifi,但是无法判断运营商网络类型(2G/3G等)。我查到有3种方法实现,前两种是通过调用私有API,第三种是只有iOS 7才有的,公有API,但是没有文档。
第一种方法就是尝试从状态栏中获取网络类型,参考 SO 。
基本原理是从UIApplication类型中通过valueForKey获取内部属性statusBar。然后筛选一个内部类型(UIStatusBarDataNetworkItemView),最后返回他的dataNetworkType属性。(不过貌似有一个缺点是如果状态栏隐藏了,该方法不会成功,参考上面SO链接中的回答部分)。
第二种方法是通过SoftwareUpdateServices.framework中的SUNetworkMonitor类型来获取,参考 SO链接 。同样也是私有API。
第三种方法是iOS 7中的公有API,在CTTelephonyNetworkInfo类型中,但是现在CTTelephonyNetworkInfo类型的官方文档 中还没有相关API的说明。获知这个API来自一篇非常棒的文章 iOS
7: Hidden Gems and Workarounds
实现起来就是使用CTTelephonyNetworkInfo类型的currentRadioAccessTechnology方法。
在苹果 iOS 6.1 to iOS 7.0 API Differences 中才提到了上述类型和其相关定义。如下,CTTelephonyNetworkInfo.h中新加入的定义:
Added CTTelephonyNetworkInfo.currentRadioAccessTechnology
Added CTRadioAccessTechnologyCDMA1x
Added CTRadioAccessTechnologyCDMAEVDORev0
Added CTRadioAccessTechnologyCDMAEVDORevA
Added CTRadioAccessTechnologyCDMAEVDORevB
Added CTRadioAccessTechnologyDidChangeNotification
Added CTRadioAccessTechnologyEdge
Added CTRadioAccessTechnologyGPRS
Added CTRadioAccessTechnologyHSDPA
Added CTRadioAccessTechnologyHSUPA
Added CTRadioAccessTechnologyLTE
Added CTRadioAccessTechnologyWCDMA
Added CTRadioAccessTechnologyeHRPD
可以写一个简单的示例,需导入CoreTelephony.framework,然后import必要的Header。
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
输出当前运营商的网络类型:
CTTelephonyNetworkInfo *networkInfo = [[ CTTelephonyNetworkInfo alloc ] init ];
NSLog ( @"%@" , networkInfo. currentRadioAccessTechnology );
也可以通过在NSNotificationCenter中注册CTRadioAccessTechnologyDidChangeNotification(宏定义)来监听状态改变。
返回目录
关于获取运营商信息,需通过CoreTelephony Framework中的CTTelephonyNetworkInfo和CTCarrier类型。这些都在iOS 4.0后就有了。
import必要的header:
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
CTCarrier类型代表着具体的运营商信息。调用CTTelephonyNetworkInfo的subscriberCellularProvider方法来获取当前运营商信息,或者调用subscriberCellularProviderDidUpdateNotifier方法来觉察运营商变化。
获取了CTCarrier类型,就可以执行从他的属性中获取运营商信息了。
目前他有如下属性:allowsVOIP,carrierName,isoCountryCode,mobileCountryCode ,mobileNetworkCode。参考 官方文档 。
其中isoCountryCode使用ISO 3166-1标准,参考:http://en.wikipedia.org/wiki/ISO_3166-1
mobileCountryCode(MCC)和mobileNetworkCode(MNC)可以参考:http://en.wikipedia.org/wiki/Mobile_country_code
中国的MCC是460。中国的MNC也在列表中,如下图:
(上图截取自 http://en.wikipedia.org/wiki/Mobile_country_code )
http://www.oschina.net/code/snippet_54100_9071
1.添加framework:
将SystemConfiguration.framework 添加进工程。
2.下载 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
复制里面的Reachability.h和Reachability.m到项目中
1. [代码]调用的代码
01 | //判断当前的网络是3g还是wifi |
02 | -(NSString*)GetCurrntNet |
03 | { |
04 | NSString* result; |
05 | Reachability *r = [ReachabilityreachabilityWithHostName:@ "www.apple.com" ]; |
06 | switch ([r currentReachabilityStatus]) { |
07 | caseNotReachable: // 没有网络连接 |
08 | result=nil; |
09 | break ; |
10 | caseReachableViaWWAN: // 使用3G网络 |
11 | result=@ "3g" ; |
12 | break ; |
13 | caseReachableViaWiFi: // 使用WiFi网络 |
14 | result=@ "wifi" ; |
15 | break ; |
16 | } |
17 | return result; |
18 | } |
http://www.tuicool.com/articles/FJzMRn
1. 获取运营商网络类型
Apple的 ReachabilitySample 看起来不错,但是只可以判断是否连接到互联网和是否连接Wifi,但是无法判断运营商网络类型(2G/3G等)。我查到有3种方法实现,前两种是通过调用私有API,第三种是只有iOS 7才有的,公有API,但是没有文档。
第一种方法就是尝试从状态栏中获取网络类型,参考 SO 。
基本原理是从UIApplication类型中通过valueForKey获取内部属性statusBar。然后筛选一个内部类型(UIStatusBarDataNetworkItemView),最后返回他的dataNetworkType属性。(不过貌似有一个缺点是如果状态栏隐藏了,该方法不会成功,参考上面SO链接中的回答部分)。
第二种方法是通过SoftwareUpdateServices.framework中的SUNetworkMonitor类型来获取,参考 SO链接 。同样也是私有API。
第三种方法是iOS 7中的公有API,在CTTelephonyNetworkInfo类型中,但是现在CTTelephonyNetworkInfo类型的官方文档 中还没有相关API的说明。获知这个API来自一篇非常棒的文章 iOS
7: Hidden Gems and Workarounds
实现起来就是使用CTTelephonyNetworkInfo类型的currentRadioAccessTechnology方法。
在苹果 iOS 6.1 to iOS 7.0 API Differences 中才提到了上述类型和其相关定义。如下,CTTelephonyNetworkInfo.h中新加入的定义:
Added CTTelephonyNetworkInfo.currentRadioAccessTechnology
Added CTRadioAccessTechnologyCDMA1x
Added CTRadioAccessTechnologyCDMAEVDORev0
Added CTRadioAccessTechnologyCDMAEVDORevA
Added CTRadioAccessTechnologyCDMAEVDORevB
Added CTRadioAccessTechnologyDidChangeNotification
Added CTRadioAccessTechnologyEdge
Added CTRadioAccessTechnologyGPRS
Added CTRadioAccessTechnologyHSDPA
Added CTRadioAccessTechnologyHSUPA
Added CTRadioAccessTechnologyLTE
Added CTRadioAccessTechnologyWCDMA
Added CTRadioAccessTechnologyeHRPD
可以写一个简单的示例,需导入CoreTelephony.framework,然后import必要的Header。
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
输出当前运营商的网络类型:
CTTelephonyNetworkInfo *networkInfo = [[ CTTelephonyNetworkInfo alloc ] init ];
NSLog ( @"%@" , networkInfo. currentRadioAccessTechnology );
也可以通过在NSNotificationCenter中注册CTRadioAccessTechnologyDidChangeNotification(宏定义)来监听状态改变。
返回目录
2. 获取运营商信息
关于获取运营商信息,需通过CoreTelephony Framework中的CTTelephonyNetworkInfo和CTCarrier类型。这些都在iOS 4.0后就有了。import必要的header:
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
CTCarrier类型代表着具体的运营商信息。调用CTTelephonyNetworkInfo的subscriberCellularProvider方法来获取当前运营商信息,或者调用subscriberCellularProviderDidUpdateNotifier方法来觉察运营商变化。
获取了CTCarrier类型,就可以执行从他的属性中获取运营商信息了。
目前他有如下属性:allowsVOIP,carrierName,isoCountryCode,mobileCountryCode ,mobileNetworkCode。参考 官方文档 。
其中isoCountryCode使用ISO 3166-1标准,参考:http://en.wikipedia.org/wiki/ISO_3166-1
mobileCountryCode(MCC)和mobileNetworkCode(MNC)可以参考:http://en.wikipedia.org/wiki/Mobile_country_code
中国的MCC是460。中国的MNC也在列表中,如下图:
(上图截取自 http://en.wikipedia.org/wiki/Mobile_country_code )
相关文章推荐
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iOS-iPhone开发之判断当前的网络状态
- iPhone开发之判断当前的网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iphone判断当前网络连接类型WIF、WWAN、2G和3G
- iPhone开发—判断网络环境3G/WIFI
- iPhone判断当前网络连接状态
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- iOS开发之判断具体当前网络类型(2G网络还是3G网络)
- iphone 判断当前为3g还是wifi网络
- 判断Iphone,Ipad当前网络状态
- [android开发]判断当前是否有网络
- iphone 判断当前网络状态