iPhone开发 判断当前的网络
来源:互联网 发布:自动凑数软件 编辑:程序博客网 时间:2024/05/09 14:18
一、使用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到项目中
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
}
二、使用currentRadioAccessTechnology获取具体的网络类型:LTE/WCDMA/GPRS等
http://www.tuicool.com/articles/FJzMRn
1. 获取运营商网络类型
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(宏定义)来监听状态改变。
返回目录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开发 判断当前的网络
- iPhone开发之判断当前的网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iOS-iPhone开发之判断当前的网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- Iphone如何判断当前网络的运营商
- iphone 判断当前网络状态
- iOS开发判断当前的网络状态
- 判断Iphone,Ipad当前网络状态
- 判断Iphone,Ipad当前网络状态
- iphone判断当前网络连接类型
- iPhone判断当前网络连接状态
- iPhone判断当前网络连接状态
- shu_1171 十->二进制转换(输入输出控制)
- java中Map等对象转换为json
- ios开发中是CoreData的一些详细介绍。
- 线程之NSThread二
- 改变背景图片background-img
- iPhone开发 判断当前的网络
- Android中如何获取应用版本号
- 动态加载JS
- ARM 寄存器的在4种模式下的不同视图
- HTML页面为什么设置了UTF-8仍然中文乱码
- 杭州医院治头痛
- CC攻击工具实现与防御理论
- sublime text2 中zendcoding(emmet)控制台无法调出解决方案
- 矩阵中的数字连通问题