iOS 如何获取设备的各种信息

xiaoxiao2021-02-28  79

http://www.cocoachina.com/ios/20170807/20149.html

一、目录结构:

获取屏幕宽度与高度

获取设备版本号

获取iPhone名称

获取app版本号

获取电池电量

获取当前系统名称

获取当前系统版本号

获取通用的唯一识别码UUID

获取当前设备IP

获取总内存大小

获取当前可用内存

获取精准电池电量

获取电池当前的状态(共有4种状态)

获取设备当前的语言

二、具体内容

1. 获取屏幕宽度与高度

1 2 3 4 5 6 7 8 /// 屏幕宽度 + (CGFloat)getDeviceScreenWidth {      return  [UIScreen mainScreen].bounds.size.width; } /// 屏幕高度 + (CGFloat)getDeviceScreenHeight {      return  [UIScreen mainScreen].bounds.size.height; }

[UIScreen mainScreen].bounds.size.width用的很普遍,一般来说定义成宏更好,然后根据屏幕宽高进行尺寸的适配。

2. 获取设备版本号

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 + (NSString *)getDeviceName {      // 需要#import "sys/utsname.h"      struct utsname systemInfo;      uname(&systemInfo);      NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];      if  ([deviceString isEqualToString:@ "iPhone3,1" ])     return  @ "iPhone 4" ;      if  ([deviceString isEqualToString:@ "iPhone3,2" ])     return  @ "iPhone 4" ;      if  ([deviceString isEqualToString:@ "iPhone3,3" ])     return  @ "iPhone 4" ;      if  ([deviceString isEqualToString:@ "iPhone4,1" ])     return  @ "iPhone 4S" ;      if  ([deviceString isEqualToString:@ "iPhone5,1" ])     return  @ "iPhone 5" ;      if  ([deviceString isEqualToString:@ "iPhone5,2" ])     return  @ "iPhone 5 (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPhone5,3" ])     return  @ "iPhone 5c (GSM)" ;      if  ([deviceString isEqualToString:@ "iPhone5,4" ])     return  @ "iPhone 5c (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPhone6,1" ])     return  @ "iPhone 5s (GSM)" ;      if  ([deviceString isEqualToString:@ "iPhone6,2" ])     return  @ "iPhone 5s (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPhone7,1" ])     return  @ "iPhone 6 Plus" ;      if  ([deviceString isEqualToString:@ "iPhone7,2" ])     return  @ "iPhone 6" ;      if  ([deviceString isEqualToString:@ "iPhone8,1" ])     return  @ "iPhone 6s" ;      if  ([deviceString isEqualToString:@ "iPhone8,2" ])     return  @ "iPhone 6s Plus" ;      if  ([deviceString isEqualToString:@ "iPhone8,4" ])     return  @ "iPhone SE" ;      if  ([deviceString isEqualToString:@ "iPod1,1" ])       return  @ "iPod Touch 1G" ;      if  ([deviceString isEqualToString:@ "iPod2,1" ])       return  @ "iPod Touch 2G" ;      if  ([deviceString isEqualToString:@ "iPod3,1" ])       return  @ "iPod Touch 3G" ;      if  ([deviceString isEqualToString:@ "iPod4,1" ])       return  @ "iPod Touch 4G" ;      if  ([deviceString isEqualToString:@ "iPod5,1" ])       return  @ "iPod Touch (5 Gen)" ;      if  ([deviceString isEqualToString:@ "iPad1,1" ])       return  @ "iPad" ;      if  ([deviceString isEqualToString:@ "iPad1,2" ])       return  @ "iPad 3G" ;      if  ([deviceString isEqualToString:@ "iPad2,1" ])       return  @ "iPad 2 (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad2,2" ])       return  @ "iPad 2" ;      if  ([deviceString isEqualToString:@ "iPad2,3" ])       return  @ "iPad 2 (CDMA)" ;      if  ([deviceString isEqualToString:@ "iPad2,4" ])       return  @ "iPad 2" ;      if  ([deviceString isEqualToString:@ "iPad2,5" ])       return  @ "iPad Mini (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad2,6" ])       return  @ "iPad Mini" ;      if  ([deviceString isEqualToString:@ "iPad2,7" ])       return  @ "iPad Mini (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPad3,1" ])       return  @ "iPad 3 (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad3,2" ])       return  @ "iPad 3 (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPad3,3" ])       return  @ "iPad 3" ;      if  ([deviceString isEqualToString:@ "iPad3,4" ])       return  @ "iPad 4 (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad3,5" ])       return  @ "iPad 4" ;      if  ([deviceString isEqualToString:@ "iPad3,6" ])       return  @ "iPad 4 (GSM+CDMA)" ;      if  ([deviceString isEqualToString:@ "iPad4,1" ])       return  @ "iPad Air (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad4,2" ])       return  @ "iPad Air (Cellular)" ;      if  ([deviceString isEqualToString:@ "iPad4,4" ])       return  @ "iPad Mini 2 (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad4,5" ])       return  @ "iPad Mini 2 (Cellular)" ;      if  ([deviceString isEqualToString:@ "iPad4,6" ])       return  @ "iPad Mini 2" ;      if  ([deviceString isEqualToString:@ "iPad4,7" ])       return  @ "iPad Mini 3" ;      if  ([deviceString isEqualToString:@ "iPad4,8" ])       return  @ "iPad Mini 3" ;      if  ([deviceString isEqualToString:@ "iPad4,9" ])       return  @ "iPad Mini 3" ;      if  ([deviceString isEqualToString:@ "iPad5,1" ])       return  @ "iPad Mini 4 (WiFi)" ;      if  ([deviceString isEqualToString:@ "iPad5,2" ])       return  @ "iPad Mini 4 (LTE)" ;      if  ([deviceString isEqualToString:@ "iPad5,3" ])       return  @ "iPad Air 2" ;      if  ([deviceString isEqualToString:@ "iPad5,4" ])       return  @ "iPad Air 2" ;      if  ([deviceString isEqualToString:@ "iPad6,3" ])       return  @ "iPad Pro 9.7" ;      if  ([deviceString isEqualToString:@ "iPad6,4" ])       return  @ "iPad Pro 9.7" ;      if  ([deviceString isEqualToString:@ "iPad6,7" ])       return  @ "iPad Pro 12.9" ;      if  ([deviceString isEqualToString:@ "iPad6,8" ])       return  @ "iPad Pro 12.9" ;      if  ([deviceString isEqualToString:@ "i386" ])          return  @ "Simulator" ;      if  ([deviceString isEqualToString:@ "x86_64" ])        return  @ "Simulator" ;      return  deviceString; }

3. 获取iPhone名称

1 2 3 4 /// 获取iPhone名称 + (NSString *)getiPhoneName {      return  [UIDevice currentDevice].name; }

获取的是你 iPhone 的名字。

4. 获取app版本号

1 2 3 4 /// 获取app版本号 + (NSString *)getAPPVerion {      return  [[[NSBundle mainBundle] infoDictionary] objectForKey:@ "CFBundleShortVersionString" ]; }

5. 获取电池电量

1 2 3 4 /// 获取电池电量 + (CGFloat)getBatteryLevel {      return  [UIDevice currentDevice].batteryLevel; }

这个方法获取电池电量不是很精确,下边会介绍一个获取精确电池电量的。

6. 获取当前系统名称

1 2 3 4 /// 当前系统名称 + (NSString *)getSystemName {      return  [UIDevice currentDevice].systemName; }

7. 获取当前系统版本号

1 2 3 4 /// 当前系统版本号 + (NSString *)getSystemVersion {      return  [UIDevice currentDevice].systemVersion; }

8. 获取通用的唯一识别码UUID

1 2 3 4 /// 通用唯一识别码UUID + (NSString *)getUUID {      return  [[UIDevice currentDevice] identifierForVendor].UUIDString; }

9. 获取当前设备IP

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // 获取当前设备IP + (NSString *)getDeviceIPAdress {      NSString *address = @ "an error occurred when obtaining ip address" ;      struct ifaddrs *interfaces = NULL;      struct ifaddrs *temp_addr = NULL;      int success = 0;      success = getifaddrs(&interfaces);      if  (success == 0) {  // 0 表示获取成功          temp_addr = interfaces;          while  (temp_addr != NULL) {              if ( temp_addr->ifa_addr->sa_family == AF_INET) {                  // Check if interface is en0 which is the wifi connection on the iPhone                  if  ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@ "en0" ]) {                      // Get NSString from C String                      address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];                  }              }              temp_addr = temp_addr->ifa_next;          }      }      freeifaddrs(interfaces);      return  address; }

10. 获取总内存大小

1 2 3 4 /// 获取总内存大小 + (long long)getTotalMemorySize {      return  [NSProcessInfo processInfo].physicalMemory; }

11. 获取当前可用内存

1 2 3 4 5 6 7 8 9 10 11 /// 获取当前可用内存 + (long long)getAvailableMemorySize {      vm_statistics_data_t vmStats;      mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;      kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vmStats, &infoCount);      if  (kernReturn != KERN_SUCCESS)      {          return  NSNotFound;      }      return  ((vm_page_size * vmStats.free_count + vm_page_size * vmStats.inactive_count)); }

12. 获取精准电池电量

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /// 获取精准电池电量 + (CGFloat)getCurrentBatteryLevel {      UIApplication *app = [UIApplication sharedApplication];      if  (app.applicationState == UIApplicationStateActive||app.applicationState==UIApplicationStateInactive) {          Ivar ivar=  class_getInstanceVariable([app class], "_statusBar" );          id status  = object_getIvar(app, ivar);          for  (id aview  in  [status subviews]) {              int batteryLevel = 0;              for  (id bview  in  [aview subviews]) {                  if  ([NSStringFromClass([bview class]) caseInsensitiveCompare:@ "UIStatusBarBatteryItemView" ] == NSOrderedSame&&[[[UIDevice currentDevice] systemVersion] floatValue] >=6.0) {                      Ivar ivar=  class_getInstanceVariable([bview class], "_capacity" );                      if (ivar) {                          batteryLevel = ((int (*)(id, Ivar))object_getIvar)(bview, ivar);                          if  (batteryLevel > 0 && batteryLevel <= 100) {                              return  batteryLevel;                          }  else  {                              return  0;                          }                      }                  }              }          }      }      return  0; }

上面这个方法是通过 runtime 获取电池电量控件类私有变量的值,较为精确。

13. 获取电池当前的状态(共有4种状态)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 /// 获取电池当前的状态,共有4种状态 + (NSString *) getBatteryState {      UIDevice *device = [UIDevice currentDevice];      if  (device.batteryState == UIDeviceBatteryStateUnknown) {          return  @ "UnKnow" ;      }  else  if  (device.batteryState == UIDeviceBatteryStateUnplugged){          return  @ "Unplugged" ;      }  else  if  (device.batteryState == UIDeviceBatteryStateCharging){          return  @ "Charging" ;      }  else  if  (device.batteryState == UIDeviceBatteryStateFull){          return  @ "Full" ;      }      return  nil; }

14. 获取设备当前的语言

1 2 3 4 5 /// 获取当前语言 + (NSString *)getDeviceLanguage {      NSArray *languageArray = [NSLocale preferredLanguages];      return  [languageArray objectAtIndex:0]; }

提示:上面代码如果直接复制的话有些会报错,这是因为需要导入头文件,详细代码请点击 iOS 获取设备的各种信息。

转载请注明原文地址: https://www.6miu.com/read-85408.html

最新回复(0)