之前用的根据状态栏获取的,iOS 13貌似不行了。。。
#import <Foundation/Foundation.h> typedef enum { NETWORK_TYPE_NONE = 0, NETWORK_TYPE_WIFI, NETWORK_TYPE_2G, NETWORK_TYPE_3G, NETWORK_TYPE_4G, NETWORK_TYPE_5G, // 5G目前为猜测结果 } NETWORK_TYPE; @interface BaseTooles : NSObject + (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar;
/*! * 获取当前网络类型 * 通过statusBar的网络subview获取具体类型 */ + (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar{ NSArray *subviews; if([[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) { // iPhone X subviews = [[[[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews]; } else{ subviews = [[[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews]; } // NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"]valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if ([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } NETWORK_TYPE nettype = NETWORK_TYPE_NONE; NSNumber *num = [dataNetworkItemView valueForKey:@"dataNetworkType"]; switch ([num intValue]) { case 0: nettype = NETWORK_TYPE_NONE; break; case 1: nettype = NETWORK_TYPE_2G; break; case 2: nettype = NETWORK_TYPE_3G; break; case 3: nettype = NETWORK_TYPE_4G; break; default: nettype = NETWORK_TYPE_WIFI; break; } return nettype; }
相关文章
Reachability
IOS开发入门之使用Reachability类判断iOS设备的当前网络连接类型
AFNetworking