iOS 获取设备的各种信息的方法
一、目录结构:
获取屏幕宽度与高度
获取设备版本号
获取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 获取设备的各种信息的方法的更多相关文章
- iOS 获取设备唯一标示符的方法
在开发中会遇到应用需要记录设备标示,即使应用卸载后再安装也可重新识别的情况,在这写一种实现方式--读取设备的UUID(Universally Unique Identifier)并通过KeyChain ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- ios 获取设备相关的信息
.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...
- iOS ---------- 获取设备的各种信息
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- iOS获取设备型号、装置类型等信息
iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...
- iOS获取设备型号和App版本号等信息(OC+Swift)
iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...
- Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息
详情请看:Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息 在项目中需要获取到当前设备,例如手机的ID,联网状态,等,然后这个Cordova里有这个插件可以用, ...
- 获取设备和 App 信息
设备对照表:https://www.theiphonewiki.com/wiki/Models 获取设备和 App 信息代码: NSLog(@"设备信息如下"); NSLog(@& ...
随机推荐
- 2018.09.28 bzoj3743: [Coci2015]Kamp(树形dp)
传送门 这是一道很有意思的题. 我们把所有的关键点都提出来,当成一棵有边权的虚树. 然后发现虚树上除最后不回到虚根的那条路径外外每条边都会被走两遍. 显然要让答案最优,不走的路径应该在虚树的直径上,于 ...
- js,java,jstl多分隔符分割字符串
1.js多分隔符 分割字符串 var username = “zhao,li;wang.liu”: var arr = str.split(/;|:|,|,|./); 括号里面可以写多分割符号,中英 ...
- Creating a Simple Web Service and Client with JAX-WS
Creating a Simple Web Service and Client with JAX-WS 发布服务 package cn.zno.service.impl; import javax. ...
- C++ sort()函数的用法
C++sort()函数的用法 C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排 ...
- springmvc 开涛 生产者/消费者
媒体类型: text/html, text/plain, text/xml image/gif, image/jpg, image/png application/x-www-form-urlenco ...
- node.excel
今天突然间想起来用node如何操作excel,记得之前用Java的poi操作excel,感觉特别爽,计算机代替人的工作,非常有用,所以决定摸索一下. 在网上找了各种模块,有导出的,有导入的,有转为js ...
- Java对象的serialVersion序列化和反序列化
Java基础学习总结——Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种 ...
- [诈骗]“中国移动”发送诈骗短信,china mobile 是骗子吗?
今年,这是我遇到的第二次短信诈骗了,两次的手法都是完全一样的.第一次,冒充的是招商银行的积分活动,结果我还真的输入了银行卡与取款密码. 输入完之后,我才醒悟,然后立刻打招商客服电话咨询,改行是否在进行 ...
- string 和String的区别
string 是 System.String 的别名,习惯上,我们把字符串当作对象时(有值的对象实体),我们用string.而我们把它当类时(需要字符串类中定义的方法),我们用String,比如: s ...
- ASP.NET MVC 中单独的JS文件中获取Controller中设定的值
1,在Controller中的Action 中将指定值写上. // // GET: /Home/ public ActionResult Index() ...