以下代码:
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"User did change SIM");
});
};
里面:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
无论我要用iSO 7.1.1在iPad Air Mini Wifi + 3G上替换多少张SIM卡,都不会调用该事件。
我究竟做错了什么?
您需要持有对该CTTelephonyNetworkInfo
对象的强烈引用。
Swift(iOS 12.0及更高版本):
在您的应用程序委托类中,为此对象声明一个属性,telephonyNetworkInfo
如下所示:
let telephonyNetworkInfo = CTTelephonyNetworkInfo()
然后将其放入您的应用程序委托的didFinishLaunchingWithOptions
方法中:
telephonyNetworkInfo.serviceSubscriberCellularProvidersDidUpdateNotifier = { [weak telephonyNetworkInfo] carrierIdentifier in
let carrier: CTCarrier? = telephonyNetworkInfo?.serviceSubscriberCellularProviders?[carrierIdentifier]
DispatchQueue.main.async {
print("User did change SIM")
}
}
Swift(iOS 12.0之前):
在您的应用程序委托类中,为此对象声明一个属性,telephonyNetworkInfo
如下所示:
let telephonyNetworkInfo = CTTelephonyNetworkInfo()
然后将其放入您的应用程序委托的didFinishLaunchingWithOptions
方法中:
telephonyNetworkInfo.subscriberCellularProviderDidUpdateNotifier = { carrier in
DispatchQueue.main.async {
print("User did change SIM")
}
}
Objective-C(iOS 12.0之前):
在您的应用程序委托@interface
(或其类扩展)中,为该对象声明一个属性telephonyNetworkInfo
,而不是以下内容:
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
用这个:
self.telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];
然后将其放入您的应用程序委托的didFinishLaunchingWithOptions
方法中:
self.telephonyNetworkInfo.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"User did change SIM");
});
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句