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