如何在ios13上使用[[UIApplication sharedApplication] valueForKey:@“ statusBar”]获取wifi信号强度?

时间:2019-08-09 20:12:20

标签: crash wifi statusbar ios13

由于未捕获的异常“ NSInternalInconsistencyException”,在[[UIApplication sharedApplication] valueForKey:@“ statusBar”]行上发生崩溃,原因:UI应用程序上的名为-statusBar或-statusBarWindow的应用程序。此代码必须更改,因为不再有状态栏或状态栏窗口。

但是没有提到如何获取wifi信号强度或其他状态栏信息(如网络栏)。 谁能建议我是否还有其他API或方法来获取这些信息?

2 个答案:

答案 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;
    }