ios如何获取手机的网络状态和运营商名称

以前获取手机的网络状态和运营商名称都是似有API,

现在我们可以大胆使用这些API了,完全可以通过审核。

具体方法如下,首先我们导入

CoreTelephony.framework

然后在我们的类中加入下面头文件

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>


下面是获取网络环境的方法:

-(void)networktype{
    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:
            NSLog(@"No wifi or cellular");
            infoLabel.text=@"无服务";
            break;
            
        case 1:
            NSLog(@"2G");
            infoLabel.text=@"2G";
            break;
            
        case 2:
            NSLog(@"3G");
            infoLabel.text=@"3G";
            break;
            
        case 3:
            NSLog(@"4G");
            infoLabel.text=@"4G";
            break;
            
        case 4:
            NSLog(@"LTE");
            infoLabel.text=@"LTE";
            break;
            
        case 5:
            NSLog(@"Wifi");
            infoLabel.text=@"Wifi";
            break;
            
            
        default:
            break;
    }}

下面是如何获取运营商名称: 

-(void)getcarrierName{
    CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
    CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];
    NSString *currentCountry=[carrier carrierName];
    NSLog(@"[carrier isoCountryCode]==%@,[carrier allowsVOIP]=%d,[carrier mobileCountryCode=%@,[carrier mobileCountryCode]=%@",[carrier isoCountryCode],[carrier allowsVOIP],[carrier mobileCountryCode],[carrier mobileNetworkCode]);
    serverLabel.text=currentCountry;
}


控制台打印的log

2014-07-31 11:14:15.919 PingDemo[2469:60b] networktype=Wifi
2014-07-31 11:14:15.926 PingDemo[2469:60b] [carrier isoCountryCode]==cn,[carrier allowsVOIP]=1,[carrier mobileCountryCode=460,[carrier mobileCountryCode]=01

其中isoCountryCode使用ISO 3166-1标准,参考:http://en.wikipedia.org/wiki/ISO_3166-1

mobileCountryCode(MCC)和mobileNetworkCode(MNC)可以参考:http://en.wikipedia.org/wiki/Mobile_country_code


真是手机截图:(我们用2G的网络来测试完全ok)



最近又看了下这个framework,发现了一个新的通知,可以用来玩玩,但是我个人感觉用处不大。

subscriberCellularProviderDidUpdateNotifier

用法:

  self.telephonyInfo.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"这个是什么啊");
        });
    };

这个我测试了下,只有手机还SIM 才会又这个通知,实用性不大。

假如有一天ios有手机处于弱网环境的通知就好了。


呵呵!





  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值