由于未捕获的异常“ NSInternalInconsistencyException”,在[[UIApplication sharedApplication] valueForKey:@“ statusBar”]行上发生崩溃,原因:UI应用程序上的名为-statusBar或-statusBarWindow的应用程序。此代码必须更改,因为不再有状态栏或状态栏窗口。
但是没有提到如何获取wifi信号强度或其他状态栏信息(如网络栏)。 谁能建议我是否还有其他API或方法来获取这些信息?
答案 0 :(得分:1)
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
if ([statusBarManager respondsToSelector:@selector(createLocalStatusBar)]) {
UIView *_localStatusBar = [statusBarManager performSelector:@selector(createLocalStatusBar)];
if ([_localStatusBar respondsToSelector:@selector(statusBar)]) {
_statusBar = [_localStatusBar performSelector:@selector(statusBar)];
NSLog(@"?%@",[[[[_statusBar valueForKey:@"_statusBar"] valueForKey:@"_currentAggregatedData"] valueForKey:@"_wifiEntry"] valueForKey:@"displayValue"]);
}
}
答案 1 :(得分:0)
id statusBar;
if (@available(iOS 13.0, *)) {
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
if ([statusBarManager respondsToSelector:@selector(createLocalStatusBar)]) {
UIView *localStatusBar = [statusBarManager performSelector:@selector(createLocalStatusBar)];
if ([localStatusBar respondsToSelector:@selector(statusBar)]) {
statusBar = [localStatusBar performSelector:@selector(statusBar)];
}
}
if (statusBar) {
id currentData = [[statusBar valueForKeyPath:@"_statusBar"] valueForKeyPath:@"currentData"];
id wifiEntry = [currentData valueForKeyPath:@"wifiEntry"];
id cellularEntry = [currentData valueForKeyPath:@"cellularEntry"];
if (wifiEntry && [[wifiEntry valueForKeyPath:@"isEnabled"] boolValue]) {
signalStrength = [[wifiEntry valueForKeyPath:@"displayValue"] intValue];
signalStrength = signalStrength == 3 ? 4 : signalStrength;
} else if (cellularEntry && [[cellularEntry valueForKeyPath:@"isEnabled"] boolValue]) {
signalStrength = [[cellularEntry valueForKey:@"displayValue"] intValue];
}
}
return signalStrength;
}