首页 > 解决方案 > 如何在 iPhone 上获得持续的 WiFi 强度

问题描述

我需要在我的应用程序中获得持续的 WiFi 强度。我正在尝试实现键值观察方法并以这种方式从 StatusBar 获取此信息:

  [UIApplication.sharedApplication()  addObserver:signalListener
                                         forKeyPath:@"IDontKnowWhat"
                                            options:NSKeyValueObservingOptionNew
                                            context:NULL]; 

但这给了我错误:

调用对象类型“UIApplication * _Nonnull”不是函数或函数指针

后来我想以这种方式获得信号强度:

    NSArray *subviews = [[[IDontKnowWhat valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
    NSString *wifiNetworkItemView = nil;    

    for (id subview in subviews) {

        if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
            wifiNetworkItemView = subview;
        }
    }
    int wifiSignalStrength = [[wifiNetworkItemView valueForKey:@"wifiStrengthRaw"] intValue];

如果可以在 UIApplication sharedApplication 的 statusBar 上实现 KVO,有人可以给我建议吗?或者有没有其他方法可以持续获得 WiFi 强度?

标签: iosobjective-ciphonexcode

解决方案


Apple 似乎不支持一般用途的 Wifi 强度分析。但是,有一种非正统的方法来获取信号强度。NEHotspotHelper 有一个 signalStrength 属性,专为用户连接热点而设计。

https://forums.developer.apple.com/thread/67932


推荐阅读