iOS 获取设备的各种信息

一、目录结构:

  1. 获取屏幕宽度与高度

  2. 获取设备版本号

  3. 获取iPhone名称

  4. 获取app版本号

  5. 获取电池电量

  6. 获取当前系统名称

  7. 获取当前系统版本号

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

  9. 获取当前设备IP

  10. 获取总内存大小

  11. 获取当前可用内存

  12. 获取精准电池电量

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

  14. 获取设备当前的语言

二、具体内容

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];
}

猜你喜欢

转载自blog.csdn.net/helloworld_junyang/article/details/77097550