iPhone X 如何根据状态栏上的图标 获取设备的联网状态(不是单个应用的)
来源:互联网 发布:淘宝刷单工作室 编辑:程序博客网 时间:2024/06/16 19:52
在iPhone X 上通过状态栏获取联网状态使用下面的代码直接闪退
- (BOOL)networkingStatesFromStatebar { UIApplication *app = [UIApplication sharedApplication]; NSArray *children = nil; children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews]; int type = 0; for (id child in children) { if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { type = [[child valueForKeyPath:@"dataNetworkType"] intValue]; } } if (type == 0) { return NO; }else{ return YES; }}
网上其他的方法
children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
不崩溃,但是不能获取正确的状态。
因此打印一下,看看能发现什么
UIApplication *app = [UIApplication sharedApplication] ; id _statusBar = [app valueForKeyPath:@"_statusBar"];//UIStatusBar_Modern id _statusBar2 = [_statusBar valueForKeyPath:@"_statusBar"];打印_statusBar2得到
<_UIStatusBar: 0x102e07e40: regions={ bottomLeading = <_UIStatusBarRegion: 0x1d412b220: identifier=bottomLeading, enabled=1, displayItems={( )}>, systemUpdates = <_UIStatusBarRegion: 0x1d012c6c0: identifier=systemUpdates, enabled=1, displayItems={( )}>, expandedTrailing = <_UIStatusBarRegion: 0x1d412b2c0: identifier=expandedTrailing, enabled=0, displayItems={( )}>, leading = <_UIStatusBarRegion: 0x1d012c1c0: identifier=leading, enabled=1, displayItems={( <_UIStatusBarDisplayItem: 0x1d418d8f0: identifier=_UIStatusBarTimeItem.shortTimeDisplayIdentifier, item=<_UIStatusBarTimeItem: 0x1d027ff00: identifier=_UIStatusBarTimeItem>, view=<_UIStatusBarStringView: 0x102e0fd20; frame = (10 3.66667; 33.3333 18); text = '3:42'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1d4288430>>>, <_UIStatusBarDisplayItem: 0x1d018d340: identifier=_UIStatusBarIndicatorLocationItem, item=<_UIStatusBarIndicatorLocationItem: 0x1d445a370: identifier=_UIStatusBarIndicatorLocationItem>, view=<_UIStatusBarImageView: 0x102f22530; frame = (46 8.33333; 10.6667 10.6667); opaque = NO; userInteractionEnabled = NO; tintColor = UIExtendedGrayColorSpace 0 1; layer = <CALayer: 0x1d422a720>>> )}>, pill = <_UIStatusBarRegion: 0x1d012c260: identifier=pill, enabled=0, displayItems={( )}>, expandedLeading = <_UIStatusBarRegion: 0x1d412b360: identifier=expandedLeading, enabled=0, displayItems={( )}>, trailing = <_UIStatusBarRegion: 0x1d012c580: identifier=trailing, enabled=1, displayItems={( <_UIStatusBarDisplayItem: 0x1d418e380: identifier=_UIStatusBarCellularItem.signalStrengthDisplayIdentifier, item=<_UIStatusBarCellularItem: 0x1d4670e00: identifier=_UIStatusBarCellularItem>, view=<_UIStatusBarCellularSignalView: 0x102f21580; frame = (0 7.33333; 17 10.6667); userInteractionEnabled = NO; layer = <CALayer: 0x1d003fc20>>>, <_UIStatusBarDisplayItem: 0x1d418ead0: identifier=_UIStatusBarCellularItem.typeDisplayIdentifier, item=<_UIStatusBarCellularItem: 0x1d4670e00: identifier=_UIStatusBarCellularItem>, view=<_UIStatusBarStringView: 0x102f217a0; frame = (21.3333 6; 17 14.3333); text = '4G'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1d009ebe0>>>, <_UIStatusBarDisplayItem: 0x1d418e5f0: identifier=_UIStatusBarBatteryItem.iconDisplayIdentifier, item=<_UIStatusBarBatteryItem: 0x1d46759c0: identifier=_UIStatusBarBatteryItem>, view=<_UIBatteryView: 0x102e13c50; frame = (42.3333 7; 24.3333 11.3333); userInteractionEnabled = NO; layer = <CALayer: 0x1d422c7a0>>> )}>, topTrailing = <_UIStatusBarRegion: 0x1d412b180: identifier=topTrailing, enabled=1, displayItems={( )}> }, items={ _UIStatusBarActivityItem_Split = <_UIStatusBarActivityItem_Split: 0x1d466f840: identifier=_UIStatusBarActivityItem_Split>, _UIStatusBarCellularItem = <_UIStatusBarCellularItem: 0x1d4670e00: identifier=_UIStatusBarCellularItem>, _UIStatusBarIndicatorAlarmItem = <_UIStatusBarIndicatorAlarmItem: 0x1d0444320: identifier=_UIStatusBarIndicatorAlarmItem>, _UIStatusBarIndicatorCallForwardingItem = <_UIStatusBarIndicatorCallForwardingItem: 0x1d0444560: identifier=_UIStatusBarIndicatorCallForwardingItem>, _UIStatusBarBackgroundActivityItem = <_UIStatusBarBackgroundActivityItem: 0x1d4670c00: identifier=_UIStatusBarBackgroundActivityItem>, _UIStatusBarBluetoothItem = <_UIStatusBarBluetoothItem: 0x1d027eb00: identifier=_UIStatusBarBluetoothItem>, _UIStatusBarIndicatorRotationLockItem = <_UIStatusBarIndicatorRotationLockItem: 0x1d0444440: identifier=_UIStatusBarIndicatorRotationLockItem>, _UIStatusBarIndicatorQuietModeItem = <_UIStatusBarIndicatorQuietModeItem: 0x1d04445c0: identifier=_UIStatusBarIndicatorQuietModeItem>, _UIStatusBarIndicatorTTYItem = <_UIStatusBarIndicatorTTYItem: 0x1d0442f40: identifier=_UIStatusBarIndicatorTTYItem>, _UIStatusBarCellularExpandedItem = <_UIStatusBarCellularExpandedItem: 0x1d466fc40: identifier=_UIStatusBarCellularExpandedItem>, _UIStatusBarIndicatorLocationItem = <_UIStatusBarIndicatorLocationItem: 0x1d445a370: identifier=_UIStatusBarIndicatorLocationItem>, _UIStatusBarThermalItem = <_UIStatusBarThermalItem: 0x1d0443060: identifier=_UIStatusBarThermalItem>, _UIStatusBarNavigationItem = <_UIStatusBarNavigationItem: 0x1d445d1c0: identifier=_UIStatusBarNavigationItem>, _UIStatusBarIndicatorAirplaneModeItem = <_UIStatusBarIndicatorAirplaneModeItem: 0x1d0443ea0: identifier=_UIStatusBarIndicatorAirplaneModeItem>, _UIStatusBarBatteryItem = <_UIStatusBarBatteryItem: 0x1d46759c0: identifier=_UIStatusBarBatteryItem>, _UIStatusBarWifiItem = <_UIStatusBarWifiItem: 0x1d44588d0: identifier=_UIStatusBarWifiItem>, _UIStatusBarIndicatorVPNItem = <_UIStatusBarIndicatorVPNItem: 0x1d4458c90: identifier=_UIStatusBarIndicatorVPNItem>, _UIStatusBarIndicatorAirPlayItem = <_UIStatusBarIndicatorAirPlayItem: 0x1d445db50: identifier=_UIStatusBarIndicatorAirPlayItem>, _UIStatusBarIndicatorLiquidDetectionItem = <_UIStatusBarIndicatorLiquidDetectionItem: 0x1d4640a80: identifier=_UIStatusBarIndicatorLiquidDetectionItem>, _UIStatusBarTimeItem = <_UIStatusBarTimeItem: 0x1d027ff00: identifier=_UIStatusBarTimeItem> }>
发现了几个关于蜂窝数据与wifi的item
_UIStatusBarCellularItem
_UIStatusBarWifiItem
然后看看如何获取这些Items。
通过xcode设置断点直接查看,得到items里面没有什么可用信息,但是在_displayItemStates有
打印_displayItemStates得到
里面包括状态栏的所有元素,打印一个
_dataEnabled就是数据可用的状态
下面就是判断的代码,
- (BOOL)networkingStatesFromStatebar { if(IsIphoneX){ //适配iPhoneX UIApplication *app = [UIApplication sharedApplication] ; NSDictionary *_displayItemStates = [[[app valueForKeyPath:@"_statusBar"] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"_displayItemStates"]; // //wifi // id value = _displayItemStates[@"_UIStatusBarWifiItem.signalStrengthDisplayIdentifier"]; NSLog(@"%@",[value class]);//_UIStatusBarDisplayItemState bool _dataEnabled =[[value valueForKeyPath:@"_dataEnabled"]boolValue]; if (_dataEnabled == YES) { return YES; } // //移动数据 // value = _displayItemStates[@"_UIStatusBarCellularItem.typeDisplayIdentifier"]; bool _dataEnabledCell =[[value valueForKeyPath:@"_dataEnabled"]boolValue]; if (_dataEnabledCell == YES) { return YES; } return NO; }else{ UIApplication *app = [UIApplication sharedApplication]; NSArray *children = nil; children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews]; int type = 0; for (id child in children) { if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { type = [[child valueForKeyPath:@"dataNetworkType"] intValue]; } } if (type == 0) { return NO; }else{ return YES; } }
阅读全文
0 0
- iPhone X 如何根据状态栏上的图标 获取设备的联网状态(不是单个应用的)
- 如何获取iPhone设备的设备信息
- Ios开发之根据状态栏获取网络的连接状态
- iOS开发之根据状态栏获取网络的连接状态
- 如何获取iphone\ipad的UUID(设备ID)号?
- 如何获取当前设备的机型(更新到iPhoneX)?判断机型是否为iPhone X?
- 设置iphone中状态栏的状态
- ios7.1以后,iphone上隐藏应用图标的方法
- (原创)iOS支持iPhone X下的获取StatusBar的网络状态
- 获取iphone的设备信息
- 如何获取iPhone电池的状态和当前的电量
- 如何获取iPhone电池的状态和当前的电量
- iphone上自定义状态栏效果的实现
- 获取应用状态栏的高度
- 如何设置微软拼音状态条上的图标
- 如何根据设备的IP获取其MAC?
- 关于状态栏的图标
- 如何取消状态栏上显示所有的图标和通知的勾选?
- JSON编辑工具绿色版
- Mycat从入门到放弃
- Android Studio 快捷键
- spring事务隔离、传播
- HTML5全局属性汇总
- iPhone X 如何根据状态栏上的图标 获取设备的联网状态(不是单个应用的)
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- 5. Longest Palindromic Substring
- Dlib + python + opencv 实时人脸68特征点提取
- 数据结构 第五周项目二 建立链栈算法库
- RocketMQ实战(二)
- caffe版本-车型检测-A Large-Scale Car Dataset for Fine-Grained Categorization and Verification
- 从0开始学习SpringCould(7)--SpringBoot 多环境配置
- Leetcode Two Maximum Subarray Questions