iOS:关于获取网络类型和运营商信息
2015-06-27 18:37
731 查看
1. 获取运营商网络类型
Apple的Reachability Sample看起来不错,但是只可以判断是否连接到互联网和是否连接Wifi,但是无法判断运营商网络类型(2G/3G等)。我查到有3种方法实现,前两种是通过调用私有API,第三种是只有iOS7才有的,公有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中新加入的定义:
?
?
?
2. 获取运营商信息
关于获取运营商信息,需通过CoreTelephony Framework中的CTTelephonyNetworkInfo和CTCarrier类型。这些都在iOS 4.0后就有了。import必要的header:
?
获取了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也在列表中,如下图:
相关文章推荐
- python单线程网络爬虫
- 网络盲写点网络(2015某市海康技术支持笔试)
- android打包准备:混淆第三方jar包(Gson, greenDao,sharesdk,UIL,高德地图, unity,pinyin4j,async http,JPush,EventBus等)
- HTTP协议
- android判断当前网络状态及跳转到设置界面
- 通过NFS启动自制的网络文件系统遇到的问题总结
- [iOS AFNetworking框架实现HTTP请求、多文件图片上传下载]
- 网络编程
- 基于UDP的网络编程
- HttpClient-调用webservice客户端
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式
- 【费用流】【网络流24题】【cogs 739】运输问题
- OSPF网络类型详解
- cocos2dx-3.3 网络编程(CURL+PHP) NO.2 登陆功能
- Hadoop2.6集群环境虚拟机中搭建网络配置
- Windows服务器配置与管理-------DHCP服务器搭建与管理
- cocos2dx-3.3 网络编程(CURL+PHP) NO.1 写好PHP代码
- Android HTTPS详解
- Linux入门篇之四:VMware虚拟网络配置