Чтобы получить уровень сигнала Wi-Fi или сотовой связи на iphone, я написал следующий код в качестве справочного материала для различных сайтов, но он не входит в оператор IF «UIStatusBarSignalStrengthItemView» или «_UIStatusBarCellularSignalView».
Вам нужно разрешение?
■Среда разработки
Xcode9.4.1
iPhoneX iOS:11.0.1
■Test1.m
#import "Test1.h"
@implementation Test1 : NSObject
- (int)antennaBar
{
NSLog(@"%@",[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] subviews]);
NSLog(@"antennaBar 1");
NSLog(@"antennaBar 2");
// NSArray *subviews = [[[apps valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSArray *subviews = nil;
NSLog(@"antennaBar 3");
id statusBar = [[UIApplication sharedApplication] valueForKey:@"statusBar"];
NSLog(@"antennaBar 4");
if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {
NSLog(@"antennaBar 5");
subviews = [[[statusBar valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
} else {
NSLog(@"antennaBar 6");
subviews = [[statusBar valueForKey:@"foregroundView"] subviews];
}
NSLog(@"antennaBar 7");
NSString *dataNetworkItemView = nil;
NSLog(@"antennaBar 8");
for (id subview in subviews) {
NSLog(@"Class - %@", NSStringFromClass([subview class]));
NSLog(@"antennaBar aaaaaaa");
if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
NSLog(@"antennaBar bbbbbb");
dataNetworkItemView = subview;
break;
}
if([subview isKindOfClass:[NSClassFromString(@"_UIStatusBarCellularSignalView") class]]) {
NSLog(@"antennaBar eeeeee");
dataNetworkItemView = subview;
int fffff = [subview valueForKey:@"numberOfActiveBars"];
NSLog(@"fffff=%d",fffff);
break;
}
}
for (id subview in subviews)
{
NSLog(@"antennaBar cccccc");
if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]])
{
NSLog(@"antennaBar dddddd");
[(NSNumber*)[subview valueForKey:@"dataNetworkType"] intValue];
}
}
NSLog(@"antennaBar 9");
NSLog(@"12345");
id statusBaraaaa = [[UIApplication sharedApplication] valueForKey:@"statusBar"];
NSArray *children = nil;
NSLog(@"23456");
children = [[[statusBaraaaa valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSLog(@"34567");
int type = 0;
NSLog(@"45678");
for (id child in children) {
NSLog(@"56789");
if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
NSLog(@"67890");
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
if (type == 0) {
return NO;
}else{
return YES;
}
int aaa = [[dataNetworkItemView valueForKey:@"signalStrengthBars"] intValue];
NSLog(@"aaa=%d",aaa);
return aaa;
}
@end
■Test1.h
#import <Foundation/Foundation.h>
#import "UIKit/UIKit.h"
@interface Test1 : NSObject
- (int)antennaBar;
@end
■Выйти из системы
( "‹_UIStatusBar: 0x14e809020: region={\n bottomLeading = \"‹_UIStatusBarRegion: 0x1d013bd00: идентификатор=bottomLeading, enabled=1, displayItems={(\n)}>\";\n extendedLeading = \"‹_UIStatusBarRegion: 0x1d013bbc0: идентификатор=expandedLeading, enabled=0, displayItems={(\n)}>\";\n expandTrailing = \"‹_UIStatusBarRegion: 0x1d013bc60: идентификатор=expandedTrailing, enabled=0, displayItems={(\n)}> \";\n ведущий = \"‹_UIStatusBarRegion: 0x1d013b940: идентификатор=ведущий, включенный=1, displayItems={(\n ‹_UIStatusBarDisplayItem: 0x1d019b450: идентификатор=_UIStatusBarTimeItem.shortTimeDisplayIdentifier, item=‹_UIStatusTimeStatarTimeItem: 0x1d046c идентификатор , view=‹_UIStatusBarStringView: 0x14e825ae0; frame = (14.3333 3.66667; 38.3333 18); text = '12:10'; userInteractionEnabled = NO; layer = ‹_UILabelLayer: 0x1d0281f40>>>\n)}>\";\n таблетка = \"‹_UIStatusBarRegion: 0x1d013b8a0: идентификатор=таблетка, включено=0, displayItems={(\n)}>\";\n systemUpdates = \"‹_UIStatusBarRegion: 0x1d0
1
2
3
4
5
7
8
Класс — UIView
ааааааа
Класс — UIView
ааааааа
Класс — UIView
ааааааа
Класс — UIView
ааааааа
Класс — UIView
ааааааа
Класс — UIView
ааааааа
cccccc
cccccc
cccccc
cccccc
cccccc
cccccc
9
12345
23456
34567
45678
56789
56789
56789
56789
56789
56789