+ (NSString *)deviceName
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *buf = (char *)(malloc(size));
sysctlbyname("hw.machine", buf, &size, NULL, 0);
NSString *model = [NSString stringWithCString:buf encoding:NSASCIIStringEncoding];
free(buf);
return (model ? model : @"");
/*
NSString *deviceName = nil;
if ([model isEqualToString:@"iPhone1,1"]) deviceName = @"iPhone1G";
if ([model isEqualToString:@"iPhone1,2"]) deviceName = @"iPhone3G";
if ([model isEqualToString:@"iPhone2,1"]) deviceName = @"iPhone3GS";
if ([model isEqualToString:@"iPhone3,1"]) deviceName = @"iPhone4";
if ([model isEqualToString:@"iPhone3,2"]) deviceName = @"iPhone4";
if ([model isEqualToString:@"iPhone3,3"]) deviceName = @"iPhone4";
if ([model isEqualToString:@"iPhone4,1"]) deviceName = @"iPhone4S";
if ([model isEqualToString:@"iPhone4,2"]) deviceName = @"iPhone4S";
if ([model isEqualToString:@"iPhone4,3"]) deviceName = @"iPhone4S";
if ([model isEqualToString:@"iPhone5,1"]) deviceName = @"iPhone5";
if ([model isEqualToString:@"iPhone5,2"]) deviceName = @"iPhone5";
if ([model isEqualToString:@"iPhone5,3"]) deviceName = @"iPhone5C";
if ([model isEqualToString:@"iPhone5,4"]) deviceName = @"iPhone5C";
if ([model isEqualToString:@"iPhone6,1"]) deviceName = @"iPhone5S";
if ([model isEqualToString:@"iPhone6,2"]) deviceName = @"iPhone5S";
if ([model isEqualToString:@"iPod1,1"]) deviceName = @"iPod-touch1G";
if ([model isEqualToString:@"iPod2,1"]) deviceName = @"iPod-touch2G";
if ([model isEqualToString:@"iPod3,1"]) deviceName = @"iPod-touch3G";
if ([model isEqualToString:@"iPod4,1"]) deviceName = @"iPod-touch4G";
if ([model isEqualToString:@"iPod5,1"]) deviceName = @"iPod-touch5G";
if ([model isEqualToString:@"iPad1,1"]) deviceName = @"iPad1";
if ([model isEqualToString:@"iPad2,1"]) deviceName = @"iPad2"; // (WiFi)
if ([model isEqualToString:@"iPad2,2"]) deviceName = @"iPad2"; // (GSM)
if ([model isEqualToString:@"iPad2,3"]) deviceName = @"iPad2"; // (CDMA)
if ([model isEqualToString:@"iPad2,4"]) deviceName = @"iPad2";
if ([model isEqualToString:@"iPad2,5"]) deviceName = @"iPad-mini";
if ([model isEqualToString:@"iPad2,6"]) deviceName = @"iPad-mini";
if ([model isEqualToString:@"iPad2,7"]) deviceName = @"iPad-mini";
if ([model isEqualToString:@"iPad3,1"]) deviceName = @"new-iPad"; // (WiFi)
if ([model isEqualToString:@"iPad3,2"]) deviceName = @"new-iPad"; // (GSM)
if ([model isEqualToString:@"iPad3,3"]) deviceName = @"new-iPad"; // (CDMA)
if ([model isEqualToString:@"iPad3,4"]) deviceName = @"iPad4";
if ([model isEqualToString:@"iPad3,5"]) deviceName = @"ipad4";
if ([model isEqualToString:@"iPad3,6"]) deviceName = @"ipad4";
if ([model isEqualToString:@"AppleTV2,1"]) deviceName = @"AppleTV2G";
if ([model isEqualToString:@"AppleTV3,1"]) deviceName = @"AppleTV3G";
if ([model isEqualToString:@"AppleTV3,2"]) deviceName = @"AppleTV3G";
if ([model isEqualToString:@"i386"]) deviceName = @"Simulator";
if (!deviceName) {
if ([model hasPrefix:@"iPhone"]) {
deviceName = @"iPhone-series";
}
if ([model hasPrefix:@"iPod"]) {
deviceName = @"iPod-series";
}
if ([model hasPrefix:@"iPad"]) {
deviceName = @"iPad-series";
}
}
if (!deviceName) {
deviceName = @"Unknown";
}
return deviceName;
*/
}
电池事件通知及电池状态:电池水平是一个浮点值,从0.0完全放电,到1.0完全充满。
[NSLog:@"Battery level: %0.2f%", [[UIDevice currentDevice] batteryLevel] * 100];
NSArray *stateArray = [NSArray arrayWithObjects: @"Unknown", @"not plugged into a charging source", @"charging", @"full", nil];
[NSLog:@"Battery state: %@", [stateArray objectAtIndex:[[UIDevice currentDevice] batteryState]]];
获得更多设备信息:使用sysctlbyname(),sysctl()标准unix函数。
在sys/sysctl.h中提供了一些设备信息常量。要注意先要#include <sys/socket.h>。
具体的参考《秘籍2》14.3重新获得更多设备信息。
hw.machine的值,第一代iPhone为(iPhone1,1),iPhone3g为(iPhone1,2),iPhone3gs为(iPhone2,1),模拟器上为x86_64。