从iPhone获取运营商名称编程

有没有办法以编程方式了解iPhone上的细胞载体?

**更新**

我正在寻找iPhone连接到的运营商名称。

在iOS 4中,CoreTelephony框架是可用的,下面是一个获取运营商名称的片段:

CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; CTCarrier *carrier = [netinfo subscriberCellularProvider]; NSLog(@"Carrier Name: %@", [carrier carrierName]); [netinfo release]; 

链接到CoreTelephony并包含在您的标题中:

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

只是为了在这里做一个笔记..我testing了这个API在不同的SIM卡上,似乎iPhone的locking运营商的名字是返回与[carrer carrierName]!

我testing了这两个iPhone手机,一个locking,另一个不是,对于locking的,无论SIM提供商,它返回运营商的名称,它被locking,每次我运行我的testing应用程序。 但请注意,跨国公司确实改变了!

没有获取运营商名称的公共API。 如果你不需要在App Store上发布,你可以看看使用私人API。

VisualVoiceMail包中的carrierServiceName似乎有一个carrierServiceName类方法,可能是您所需要的。 将该标题放在项目中并调用[VVCarrierParameters carrierServiceName]

注意你的应用程序很可能会被拒绝,如果你这样做

在开发Alpha时 ,我遇到了同样的问题。 该项目本身不仅限于使用公共API,所以我首先尝试了@Jason Harwig的解决scheme。 因为我无法做到这一点,所以我想到了另一种select。

我的解决scheme使用私有API来访问显示在状态栏中的标签( UIStatusBarServiceItemView )的_serviceString ivar。

它依赖于具有载体值的状态栏,只需要UIKit工作。

 - (NSString *)carrierName { UIView* statusBar = [self statusBar]; UIView* statusBarForegroundView = nil; for (UIView* view in statusBar.subviews) { if ([view isKindOfClass:NSClassFromString(@"UIStatusBarForegroundView")]) { statusBarForegroundView = view; break; } } UIView* statusBarServiceItem = nil; for (UIView* view in statusBarForegroundView.subviews) { if ([view isKindOfClass:NSClassFromString(@"UIStatusBarServiceItemView")]) { statusBarServiceItem = view; break; } } if (statusBarServiceItem) { id value = [statusBarServiceItem valueForKey:@"_serviceString"]; if ([value isKindOfClass:[NSString class]]) { return (NSString *)value; } } return @"Unavailable"; } - (UIView *)statusBar { NSString *statusBarString = [NSString stringWithFormat:@"%@ar", @"_statusB"]; return [[UIApplication sharedApplication] valueForKey:statusBarString]; } 

我只testing了状态栏可见的应用程序的方法。 它返回与状态栏中显示的string相同的string,即使在漫游时也能正常工作。

这种方法不是App Store的安全。

https://developer.apple.com/iphone/prerelease/library/documentation/NetworkingInternet/Reference/CTCarrier/Reference/Reference.html#//apple_ref/doc/uid/TP40009596-CH1-DontLinkElementID_3

有一个这样的方式,但它只能在iOS 4上使用,所以你将无法在以前的版本上使用它。 这也可能会破坏你的向后兼容性。

对于swift用户,你可以试试这个:

 import CoreTelephony static var carrierName:String? { let networkInfo = CTTelephonyNetworkInfo() let carrier = networkInfo.subscriberCellularProvider return carrier?.carrierName } 
    Interesting Posts