iOS 如何獲取設備的各種信息

一、目錄結構:

獲取屏幕寬度與高度

獲取設備版本號

獲取iPhone名稱

獲取app版本號

獲取電池電量

獲取當前系統(tǒng)名稱

獲取當前系統(tǒng)版本號

獲取通用的唯一識別碼UUID

獲取當前設備IP

獲取總內存大小

獲取當前可用內存

獲取精準電池電量

獲取電池當前的狀態(tài)(共有4種狀態(tài))

獲取設備當前的語言

二、具體內容

1. 獲取屏幕寬度與高度

///?屏幕寬度

+?(CGFloat)getDeviceScreenWidth?{

return?[UIScreen?mainScreen].bounds.size.width;

}

///?屏幕高度

+?(CGFloat)getDeviceScreenHeight?{

return?[UIScreen?mainScreen].bounds.size.height;

}

[UIScreen mainScreen].bounds.size.width用的很普遍,一般來說定義成宏更好,然后根據屏幕寬高進行尺寸的適配。

2. 獲取設備版本號

+?(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名稱

///?獲取iPhone名稱

+?(NSString?*)getiPhoneName?{

return?[UIDevice?currentDevice].name;

}

獲取的是你 iPhone 的名字。

4. 獲取app版本號

///?獲取app版本號

+?(NSString?*)getAPPVerion?{

return?[[[NSBundle?mainBundle]?infoDictionary]?objectForKey:@"CFBundleShortVersionString"];

}

5. 獲取電池電量

///?獲取電池電量

+?(CGFloat)getBatteryLevel?{

return?[UIDevice?currentDevice].batteryLevel;

}

這個方法獲取電池電量不是很精確,下邊會介紹一個獲取精確電池電量的。

6. 獲取當前系統(tǒng)名稱

///?當前系統(tǒng)名稱

+?(NSString?*)getSystemName?{

return?[UIDevice?currentDevice].systemName;

}

7. 獲取當前系統(tǒng)版本號

///?當前系統(tǒng)版本號

+?(NSString?*)getSystemVersion?{

return?[UIDevice?currentDevice].systemVersion;

}

8. 獲取通用的唯一識別碼UUID

///?通用唯一識別碼UUID

+?(NSString?*)getUUID?{

return?[[UIDevice?currentDevice]?identifierForVendor].UUIDString;

}

9. 獲取當前設備IP

//?獲取當前設備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. 獲取總內存大小

///?獲取總內存大小

+?(long?long)getTotalMemorySize?{

return?[NSProcessInfo?processInfo].physicalMemory;

}

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. 獲取精準電池電量

///?獲取精準電池電量

+?(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. 獲取電池當前的狀態(tài)(共有4種狀態(tài))

///?獲取電池當前的狀態(tài),共有4種狀態(tài)

+?(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. 獲取設備當前的語言

///?獲取當前語言

+?(NSString?*)getDeviceLanguage?{

NSArray?*languageArray?=?[NSLocale?preferredLanguages];

return?[languageArray?objectAtIndex:0];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容