NTESDevice.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // NTESDevice.m
  3. // NIM
  4. //
  5. // Created by chris on 15/9/18.
  6. // Copyright © 2015年 Netease. All rights reserved.
  7. //
  8. #import "NTESDevice.h"
  9. #import "Reachability.h"
  10. #import <CoreTelephony/CTTelephonyNetworkInfo.h>
  11. #import <sys/sysctl.h>
  12. #import <sys/utsname.h>
  13. #define NormalImageSize (1280 * 960)
  14. @interface NTESDevice ()
  15. @property (nonatomic,copy) NSDictionary *networkTypes;
  16. @end
  17. @implementation NTESDevice
  18. - (instancetype)init
  19. {
  20. if (self = [super init])
  21. {
  22. [self buildDeviceInfo];
  23. }
  24. return self;
  25. }
  26. + (NTESDevice *)currentDevice{
  27. static NTESDevice *instance = nil;
  28. static dispatch_once_t onceToken;
  29. dispatch_once(&onceToken, ^{
  30. instance = [[NTESDevice alloc] init];
  31. });
  32. return instance;
  33. }
  34. - (void)buildDeviceInfo
  35. {
  36. _networkTypes = @{
  37. CTRadioAccessTechnologyGPRS:@(NTESNetworkType2G),
  38. CTRadioAccessTechnologyEdge:@(NTESNetworkType2G),
  39. CTRadioAccessTechnologyWCDMA:@(NTESNetworkType3G),
  40. CTRadioAccessTechnologyHSDPA:@(NTESNetworkType3G),
  41. CTRadioAccessTechnologyHSUPA:@(NTESNetworkType3G),
  42. CTRadioAccessTechnologyCDMA1x:@(NTESNetworkType3G),
  43. CTRadioAccessTechnologyCDMAEVDORev0:@(NTESNetworkType3G),
  44. CTRadioAccessTechnologyCDMAEVDORevA:@(NTESNetworkType3G),
  45. CTRadioAccessTechnologyCDMAEVDORevB:@(NTESNetworkType3G),
  46. CTRadioAccessTechnologyeHRPD:@(NTESNetworkType3G),
  47. CTRadioAccessTechnologyLTE:@(NTESNetworkType4G),
  48. };
  49. }
  50. //图片/音频推荐参数
  51. - (CGFloat)suggestImagePixels{
  52. return NormalImageSize;
  53. }
  54. - (CGFloat)compressQuality{
  55. return 0.5;
  56. }
  57. //App状态
  58. - (BOOL)isUsingWifi{
  59. Reachability *reachability = [Reachability reachabilityForInternetConnection];
  60. NetworkStatus status = [reachability currentReachabilityStatus];
  61. return status == ReachableViaWiFi;
  62. }
  63. - (BOOL)isInBackground{
  64. return [[UIApplication sharedApplication] applicationState] != UIApplicationStateActive;
  65. }
  66. - (NTESNetworkType)currentNetworkType{
  67. Reachability *reachability = [Reachability reachabilityForInternetConnection];
  68. NetworkStatus status = [reachability currentReachabilityStatus];
  69. switch (status) {
  70. case ReachableViaWiFi:
  71. return NTESNetworkTypeWifi;
  72. case ReachableViaWWAN:
  73. {
  74. CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
  75. NSNumber *number = [_networkTypes objectForKey:telephonyInfo.currentRadioAccessTechnology];
  76. return number ? (NTESNetworkType)[number integerValue] : NTESNetworkTypeWwan;
  77. }
  78. default:
  79. return NTESNetworkTypeUnknown;
  80. }
  81. }
  82. - (NSString *)networkStatus:(NTESNetworkType)networkType
  83. {
  84. switch (networkType) {
  85. case NTESNetworkType2G:
  86. return @"2G";
  87. case NTESNetworkType3G:
  88. return @"3G";
  89. case NTESNetworkType4G:
  90. return @"4G";
  91. default:
  92. return @"WIFI";
  93. }
  94. }
  95. - (NSInteger)cpuCount{
  96. size_t size = sizeof(int);
  97. int results;
  98. int mib[2] = {CTL_HW, HW_NCPU};
  99. sysctl(mib, 2, &results, &size, NULL, 0);
  100. return (NSUInteger) results;
  101. }
  102. - (BOOL)isLowDevice{
  103. #if TARGET_IPHONE_SIMULATOR
  104. return NO;
  105. #else
  106. return [[NSProcessInfo processInfo] processorCount] <= 1;
  107. #endif
  108. }
  109. - (BOOL)isIphone{
  110. NSString *deviceModel = [UIDevice currentDevice].model;
  111. if ([deviceModel isEqualToString:@"iPhone"]) {
  112. return YES;
  113. }else {
  114. return NO;
  115. }
  116. }
  117. - (NSString *)machineName{
  118. struct utsname systemInfo;
  119. uname(&systemInfo);
  120. return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  121. }
  122. - (CGFloat)statusBarHeight{
  123. CGFloat height = [UIApplication sharedApplication].statusBarFrame.size.height;
  124. return height;
  125. }
  126. @end