iOS:关于获取网络类型和运营商信息
来源:互联网 发布:uygurqa mp3 下载软件 编辑:程序博客网 时间:2024/05/18 03:57
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.currentRadioAccessTechnologyAdded CTRadioAccessTechnologyCDMA1xAdded CTRadioAccessTechnologyCDMAEVDORev0Added CTRadioAccessTechnologyCDMAEVDORevAAdded CTRadioAccessTechnologyCDMAEVDORevBAdded CTRadioAccessTechnologyDidChangeNotificationAdded CTRadioAccessTechnologyEdgeAdded CTRadioAccessTechnologyGPRSAdded CTRadioAccessTechnologyHSDPAAdded CTRadioAccessTechnologyHSUPAAdded CTRadioAccessTechnologyLTEAdded CTRadioAccessTechnologyWCDMAAdded 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也在列表中,如下图:
- iOS:关于获取网络类型和运营商信息
- iOS:关于获取网络类型和运营商信息
- iOS:关于获取网络类型和运营商信息
- iOS:关于获取网络类型和运营商信息
- iOS 关于获取网络类型和运营商信息
- iOS获取网络类型和运营商信息
- iOS 手机网络类型和运营商怎么获取
- iOS状态栏获取网络类型,运营商,电池电量,显示的系统时间等信息
- IOS模拟器能获取运营商信息,网络连接类型以及地理位置吗?
- IOS模拟器能获取运营商信息,网络连接类型以及地理位置吗?
- ios获取运营商和网络的demo
- ios获取运营商和网络的demo
- 获取Android 运营商网络类型
- iOS获取运营商信息(IMSI)
- iOS-获取当前设备的信息,网络状态,运营商,设备震动.获取设备信息
- ios如何获取手机的网络状态和运营商名称
- ios如何获取手机的网络状态和运营商名称
- ios如何获取手机的网络状态和运营商名称
- php json_encode() 数据
- Error code:1728 Cannot load from mysql.proc. The table is probably corrupted
- 彻底明白如何设置minSdkVersion和targetSdkVersion
- 排序算法——选择排序
- css media属性说明
- iOS:关于获取网络类型和运营商信息
- 【Linux】将终端的命令输出保存为txt文本文件
- 「译」不侧漏精通 Node.js
- position:relative;top属性移动div后的空白怎么去掉
- 阿里云服务器异地登录报警
- poj2492解题报告
- 《Python核心编程》第九章编程题代码
- 欢迎使用CSDN-markdown编辑器
- What is the firewall?