首页 > 解决方案 > 如何获取 iOS 的蜂窝或 wifi 信号强度,尤其是 iPhone X?除了从系统状态栏获取它?

问题描述

我知道我们可以通过从系统状态栏视图中读取属性来获取信号强度,还有其他方法可以获取信息吗?

标签: iosiphone

解决方案


        #define IS_IPHONE_X    ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? \
    CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

    int numberOfBars = 5;           
    int numberOfActiveBars = 0;
    BOOL isFound = NO;

    if (@available(iOS 11.0, *)) {
        numberOfBars = 4;          
    }

    UIApplication *app = [UIApplication sharedApplication];
    id statusBar = [app valueForKey:@"statusBar"];
    if (IS_IPHONE_X) {
        id statusBarView = [statusBar valueForKeyPath:@"statusBar"];
        UIView *foregroundView = [statusBarView valueForKeyPath:@"foregroundView"];
        NSArray *subviews = [[foregroundView subviews][2] subviews];

        for (id subview in subviews) {
            if ([subview isKindOfClass:NSClassFromString(@"_UIStatusBarCellularSignalView")]) {
                numberOfActiveBars = [[subview valueForKey:@"_numberOfActiveBars"] intValue];
                numberOfBars = [[subview valueForKey:@"_numberOfBars"] intValue];
                isFound = YES;
                break;
            }
        }
    } else {
        UIView *foregroundView = [statusBar valueForKey:@"foregroundView"];
        NSArray *subviews = [foregroundView subviews];
        for (id subview in subviews) {
            if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
                numberOfActiveBars = [[subview valueForKey:@"_signalStrengthBars"] intValue];
                isFound = YES;
                break;
            }
        }
    }

推荐阅读