ios获取运营商和网络的demo

来源:互联网 发布:淘宝网小饰品批发 编辑:程序博客网 时间:2024/05/14 14:34

#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

阅读全文
0 0
原创粉丝点击