#import "ViewController.h"
#import<CoreTelephony/CTTelephonyNetworkInfo.h>
#import<CoreTelephony/CTCarrier.h>
@interface ViewController ()
@property(nonatomic,strong)CTTelephonyNetworkInfo *telephonyInfo;
@property(nonatomic,strong)UILabel *messageLa;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//[self updateMessage];
self.messageLa = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 350)];
self.messageLa.numberOfLines = 0;
[self.view addSubview:self.messageLa];
UIButton *refreshBtn = [[UIButton alloc]initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width-100)/2, 350, 100, 50)];
refreshBtn.backgroundColor = [UIColor blackColor];
refreshBtn.layer.cornerRadius = 10;
[refreshBtn setTitle:@"重新获取" forState:UIControlStateNormal];
[refreshBtn setTitle:@"重新获取" forState:UIControlStateSelected];
[refreshBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[refreshBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[refreshBtn addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:refreshBtn];
[self getCarrierName];
}
/**
举例注解:
carrier name: 中国移动
mobile country code: 460
mobile network code: 00
ISO country code: cn
Allows VOIP: YES
*/
-(void)getCarrierName
{
self.telephonyInfo = [[CTTelephonyNetworkInfo alloc]init];
CTCarrier *carrier = [self.telephonyInfo subscriberCellularProvider];
NSString *currentCountry = [carrier carrierName];
NSLog(@"[carrier isoCountrCode] = %@, [carrier allowsVOIP] = %d, [carrier mobileCountryCode] = %@, [carrier mobileNetworkCode] = %@", [carrier isoCountryCode], [carrier allowsVOIP], [carrier mobileCountryCode], [carrier mobileNetworkCode]);
//网络状态
NSString *netState = [self networktype];
//信号的强弱
NSString *signalStrength = [self signalMessage];
//如果没有手机卡
if (!carrier.isoCountryCode) {
self.messageLa.textAlignment = NSTextAlignmentCenter;
self.messageLa.text = @"检测到无手机卡,无运营商";
}else
{
self.messageLa.text = [NSString stringWithFormat:@"\n\n运营商名称:%@\n\nISO国家码: %@\n\n移动设备网络代码(MNC):%@\n\n移动设备国家代码(MCC): %@\n\n是否支持网络电话(VOIP): %d\n\n使用网络状态: %@\n\n网络信号强弱为: %@",currentCountry,[carrier isoCountryCode],[carrier mobileNetworkCode],[carrier mobileCountryCode],[carrier allowsVOIP],netState, signalStrength];
}
}
-(NSString *)networktype{
NSString *info = [[NSString alloc]init];
NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSNumber *dataNetworkItemView = nil;
for (id subview in subviews) {
if ([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dataNetworkItemView = subview;
break;
}
}
switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"] integerValue]) {
case 0:
info = @"无服务";
break;
case 1:
info = @"2G";
break;
case 2:
info = @"3G";
break;
case 3:
info = @"4G";
break;
case 4:
info = @"LTE";
break;
case 5:
info = @"wifi";
break;
default:
break;
}
return info;
}
//获取信号强弱
-(NSString *)signalMessage{
NSString *info = [[NSString alloc]init];
NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSNumber *dataNetworkItemView = nil;
NSNumber *signalStrengthItemView = nil;
for (id subview in subviews) {
if ([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dataNetworkItemView = subview;
}
if ([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
signalStrengthItemView = subview;
}
if (dataNetworkItemView && signalStrengthItemView) {
break;
}
}
NSNumber *networkTypeNum = [dataNetworkItemView valueForKey:@"dataNetworkType"];
//网络信号强弱
NSNumber *signalStrengthBars = [signalStrengthItemView valueForKey:@"signalStrengthBars"];
//wifi的信号强弱
NSNumber *wifiStrength = [dataNetworkItemView valueForKey:@"wifiStrengthBars"];
NSInteger networkType = [networkTypeNum integerValue];
switch (networkType) {
case 0:
info = @"无服务";
break;
case 1:
info = [NSString stringWithFormat:@"%@",signalStrengthBars];
break;
case 2:
info = [NSString stringWithFormat:@"%@",signalStrengthBars];
break;
case 3:
info = [NSString stringWithFormat:@"%@",signalStrengthBars];
break;
case 4:
info = [NSString stringWithFormat:@"%@",signalStrengthBars];
break;
case 5:
info = [NSString stringWithFormat:@"%@",wifiStrength];
break;
default:
break;
}
return info;
}
-(void)refreshData
{
self.messageLa.text = nil;
[self performSelector:@selector(todo) withObject:nil afterDelay:1.0f];
}
-(void)todo
{
[self getCarrierName];
}
//-(void)updateMessage
//{
// self.telephonyInfo.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier)
// {
// dispatch_async(dispatch_get_main_queue(), ^{
// NSLog(@"+++++++++++");
// });
// };
//}
@end