iOS 13以上系統(tǒng)獲取信號(hào)強(qiáng)度
該方式獲取到的值是信號(hào)格數(shù),并不是具體的信號(hào)值。如果需求只是來分析信號(hào)質(zhì)量,可以采取這樣的方法。具體的值目前還在研究中。? 蘋果真的是越來越防著我們知道具體的信號(hào)強(qiáng)度了。 難道以為我們不知道值就不知道他信號(hào)差了嗎?(狗頭)
?if(@available(iOS13.0, *)) {
? ? ? ? NSArray *arr = [UIApplication sharedApplication].connectedScenes.allObjects;
? ? ? ? UIWindowScene*scene = arr.firstObject;
? ? ? ? UIStatusBarManager*statusBarManager = scene.statusBarManager;
? ? ? ? id?statusBar =nil;
? ? ? ? if([statusBarManagerrespondsToSelector:@selector(createLocalStatusBar)]) {
? ? ? ? ? ? UIView*localStatusBar = [statusBarManagerperformSelector:@selector(createLocalStatusBar)];
? ? ? ? ? ? if([localStatusBarrespondsToSelector:@selector(statusBar)]) {
? ? ? ? ? ? ? ? statusBar = [localStatusBarperformSelector:@selector(statusBar)];
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(statusBar) {
? ? ? ? ? ? idcurrentData = [[statusBarvalueForKeyPath:@"_statusBar"]valueForKeyPath:@"currentData"];
? ? ? ? ? ? idcellularEntry = [currentDatavalueForKeyPath:@"cellularEntry"];? ? ? ? ? ?if([cellularEntryisKindOfClass:NSClassFromString(@"_UIStatusBarDataIntegerEntry")]) {
? ? ? ? ? ? ? ? signalStrength = [[cellularEntryvalueForKey:@"displayValue"]intValue];
? ? ? ? ? ? }
? ? ? ? }
? ? }
iOS13以下系統(tǒng)獲取信號(hào)強(qiáng)度
? ? UIApplication *app = [UIApplication sharedApplication];
? ? NSArray*subviews = [[[appvalueForKey:@"statusBar"]valueForKey:@"foregroundView"]subviews];
? ? NSString*dataNetworkItemView =nil;
? ? for(idsubviewinsubviews) {
? ? ? ? if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]])
? ? ? ? {
? ? ? ? ? ? dataNetworkItemView = subview;
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? NSIntegersignalStrength = [[dataNetworkItemViewvalueForKey:@"signalStrengthRaw"]intValue];
? ? NSString*signalStrengthStr = [NSStringstringWithFormat:@"%lddBm",(long)signalStrength];