从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的安全。
有一个这样的方式,但它只能在iOS 4上使用,所以你将无法在以前的版本上使用它。 这也可能会破坏你的向后兼容性。
对于swift用户,你可以试试这个:
import CoreTelephony static var carrierName:String? { let networkInfo = CTTelephonyNetworkInfo() let carrier = networkInfo.subscriberCellularProvider return carrier?.carrierName }