- 運(yùn)營(yíng)商信息: 直接使用CTTelephonyNetworkInfo的服務(wù)即可獲得運(yùn)營(yíng)商的名字, 運(yùn)營(yíng)商編碼等信息. easy!
-(NSString *)currentCarrierName{
CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];
return [[NSString alloc] initWithFormat:@"%@_%@_%@_%@", [carrier carrierName], [carrier mobileCountryCode], [carrier mobileNetworkCode], [carrier isoCountryCode]];
}
- 當(dāng)前網(wǎng)絡(luò)類(lèi)型(WiFi/4G) 信號(hào)強(qiáng)弱
Google到的一個(gè)文章, 大致是訪問(wèn)statusBar的視圖, 然后KVC訪問(wèn)該視圖的屬性, 從而得到想要的信息.
文章沒(méi)有提到如何獲得信號(hào)強(qiáng)度, 不過(guò), 順著它的思路, 很快就找到了關(guān)鍵點(diǎn):
類(lèi):**UIStatusBarDataNetworkItemView**, **UIStatusBarSignalStrengthItemView**
屬性:**dataNetworkType**, **wifiStrengthBars**, **signalStrengthBars**
詳細(xì)代碼如下:
-(NSString *)currentNetworkType{
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;
}
}
if (!dataNetworkItemView) {
return nil;
}
NSNumber *networkTypeNum = [dataNetworkItemView valueForKey:@"dataNetworkType"];
NSNumber *wifiStrengthBars = [dataNetworkItemView valueForKey:@"wifiStrengthBars"];
NSNumber *signalStrengthBars = [signalStrengthItemView valueForKey:@"signalStrengthBars"];
if (!networkTypeNum) {
return nil;
}
NSInteger networkType = [networkTypeNum integerValue];
switch (networkType) {
case 0:
return @"No Service";
break;
case 1:
return [[NSString alloc] initWithFormat:@"%@_%@", @"2G", signalStrengthBars];
break;
case 2:
return [[NSString alloc] initWithFormat:@"%@_%@", @"3G", signalStrengthBars];
break;
case 3:
return [[NSString alloc] initWithFormat:@"%@_%@", @"4G", signalStrengthBars];
break;
case 4:
return [[NSString alloc] initWithFormat:@"%@_%@", @"LTE", signalStrengthBars];
break;
case 5:
return [[NSString alloc] initWithFormat:@"%@_%@", @"WiFi", wifiStrengthBars];
break;
default:
return [[NSString alloc] initWithFormat:@"%@_%@_%@", networkTypeNum, wifiStrengthBars, signalStrengthBars];
break;
}
}
- 授之以漁
我是怎么知道上面說(shuō)的這些類(lèi)有什么可以訪問(wèn)的屬性的呢?
答案是借助一個(gè)杰出的開(kāi)源庫(kù)YYModel.
當(dāng)然, 自己用OC的runtime方法寫(xiě)也是可以的, 只是沒(méi)有用YYModel已經(jīng)封裝好的方法方便.
#import "YYModel.h"
//...
YYClassInfo *info = [YYClassInfo classInfoWithClass:[signalStrengthItemView class]];
NSLog(@"dataNetworkItemView ivars:%@", info.ivarInfos);
NSLog(@"dataNetworkItemView properties:%@", info.propertyInfos);
NSLog(@"dataNetworkItemView method:%@", info.methodInfos);
- 結(jié)束:)