ios - 如何获取 iOS 的蜂窝或 wifi 信号强度,尤其是 iPhone X?除了从系统状态栏获取它?
问题描述
我知道我们可以通过从系统状态栏视图中读取属性来获取信号强度,还有其他方法可以获取信息吗?
解决方案
#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;
}
}
}
推荐阅读
- nfc - i2c 配置在 stm32l476 微控制器和 m24lr016 设备之间进行通信
- python - 带有优化的 TSP 的 Python 变体
- react-native - 当设置 pagingEnabled 时,Flat List 在每个项目后反弹
- python-3.x - 为什么 discord.py 中的 add_roles() 方法在这里失败?
- django - 返回客户 Django 订单中的所有订单项
- java - Aeron - 跨交换机的多播问题
- ios - 使用 ForEach 列出多个数组 - SwiftUI
- r - 按多列分组并计算平均值
- c - 在 C 中释放整个链表
- angularjs - 如何为 AngularJS $http Post 调用指定 Content-length 标头