在iOS 8.3中获取CellID、MCC、MNC、LAC、信号强度、质量和网络。

4
如何在iOS 8.3中使用私有API获取基站ID,因为先前的核心电话私有API在最新的iOS SDK 8.3中不起作用。
2个回答

5
你仍然可以使用它。它适用于iOS 8.3。我不知道如何获取信号强度。苹果公司最近在核心通信技术方面进行了很多改变。:(
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSString *carrierNetwork = telephonyInfo.currentRadioAccessTechnology;
NSLog(@"Mobile Network): %@", carrierNetwork);

CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];

NSString *mobileCountryCode = [carrier mobileCountryCode];
NSLog(@"Mobile Country Code (MCC): %@", mobileCountryCode);

NSString *mobileNetworkCode = [carrier mobileNetworkCode];
NSLog(@"Mobile Network Code (MNC): %@", mobileNetworkCode);

NSString *carrierName = [carrier carrierName];
NSLog(@"Mobile Network name: %@", carrierName);

NSString *isoCountryCode = [carrier isoCountryCode];
NSLog(@"Mobile Network isoCode: %@", isoCountryCode);

编辑:我找到了获取信号强度的解决方案。 *!请注意,下面的解决方案使用了私有API,因此如果提交到App Store上,将被苹果拒绝。

UIApplication *app = [UIApplication sharedApplication];
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSString *dataNetworkItemView = nil;

for (id subview in subviews) {
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
        dataNetworkItemView = subview;
        break;
    }
}

int signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue];

NSLog(@"signal %d", signalStrength);

从这里我只能得到MNC和MCC,但我正在寻找小区ID、LAC和信号强度,这些在8.3之前可以使用私有API获得,但在新的升级中不起作用了。有任何更新吗? - Pooja Maha
1
我知道这篇帖子比较旧了,但想知道是否有人已经解决了这个问题。 - RockPaperScissors
不行。有一个解决方案,但只适用于越狱设备。 - Mateusz Mirkowski
@MateuszMirkowski 这是一个很好的回答,但是否能被苹果接受并提交呢? - Pooja Maha
1
是的,它将被苹果拒绝,因为它使用了私有变量。 - Mateusz Mirkowski
显示剩余2条评论

0

在iOS 5.1中获取CellID、MCC、MNC、LAC和网络

您可以访问上述链接,在iOS 8.2以下版本中获取LAC和Cell。 如果您想在iOS 8.3以上版本中获取LAC和Cell,您需要添加权限:

<key>com.apple.CommCenter.fine-grained</key>
<array>
    <string>spi</string>
</array>

而且,它说你的手机需要越狱。

但实际上,我无法在真机上尝试。如果你成功了,就分享一下,谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接