Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为iOS(尤其是iPhone X)获取手机或wifi信号强度?除了从系统状态栏获取之外?_Ios_Iphone - Fatal编程技术网

如何为iOS(尤其是iPhone X)获取手机或wifi信号强度?除了从系统状态栏获取之外?

如何为iOS(尤其是iPhone X)获取手机或wifi信号强度?除了从系统状态栏获取之外?,ios,iphone,Ios,Iphone,我知道,我们可以通过从系统状态栏视图中读取属性来获得信号强度,还有其他方法可以获得信息吗?欢迎来到SO,在这里,开发人员可以学习、分享和建立职业生涯!纯代码编写请求与堆栈溢出无关-我们希望这里的问题与特定的编程问题相关-但我们很乐意帮助您自己编写!告诉我们你尝试了什么,你被困在哪里了。这也有助于我们更好地回答您的问题:?我找到了一些答案,这些答案正在阅读系统状态栏信息以获取强度。iPoneX和其他iphone的属性路径也不相同。但是获取强度的方法很棘手,有没有其他的框架可以用来获取强度信息?可能

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

欢迎来到SO,在这里,开发人员可以学习、分享和建立职业生涯!纯代码编写请求与堆栈溢出无关-我们希望这里的问题与特定的编程问题相关-但我们很乐意帮助您自己编写!告诉我们你尝试了什么,你被困在哪里了。这也有助于我们更好地回答您的问题:?我找到了一些答案,这些答案正在阅读系统状态栏信息以获取强度。iPoneX和其他iphone的属性路径也不相同。但是获取强度的方法很棘手,有没有其他的框架可以用来获取强度信息?可能的重复使用未记录的符号,例如任何带有下划线的前缀,_numberOfActiveBars和_numberOfBars,很可能会被苹果公司拒绝。如果应用程序需要通过应用商店分发,请不要使用此方法。感谢您的评论,我知道此代码很棘手,这就是为什么我询问是否有其他方法获取信息。非常感谢您的帮助。据我所知,没有一种AppStore安全的方法可以获取此信息。您可以获得用户是否有连接以及是否通过LTE或WIFI连接的一般可达性信息,但不能获得实际信号强度。
        #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;
            }
        }
    }