iOS 如何獲取設(shè)備的各種信息

一持搜、目錄結(jié)構(gòu):

獲取屏幕寬度與高度

獲取設(shè)備版本號

獲取iPhone名稱

獲取app版本號

獲取電池電量

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

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

獲取通用的唯一識別碼UUID

獲取當(dāng)前設(shè)備IP

獲取總內(nèi)存大小

獲取當(dāng)前可用內(nèi)存

獲取精準(zhǔn)電池電量

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

獲取設(shè)備當(dāng)前的語言

二啊楚、具體內(nèi)容

1. 獲取屏幕寬度與高度

///?屏幕寬度

+?(CGFloat)getDeviceScreenWidth?{

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

}

///?屏幕高度

+?(CGFloat)getDeviceScreenHeight?{

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

}

[UIScreen mainScreen].bounds.size.width用的很普遍诫肠,一般來說定義成宏更好络它,然后根據(jù)屏幕寬高進(jìn)行尺寸的適配育勺。

2. 獲取設(shè)備版本號

+?(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. 獲取當(dāng)前系統(tǒng)名稱

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

+?(NSString?*)getSystemName?{

return?[UIDevice?currentDevice].systemName;

}

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

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

+?(NSString?*)getSystemVersion?{

return?[UIDevice?currentDevice].systemVersion;

}

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

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

+?(NSString?*)getUUID?{

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

}

9. 獲取當(dāng)前設(shè)備IP

//?獲取當(dāng)前設(shè)備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. 獲取總內(nèi)存大小

///?獲取總內(nèi)存大小

+?(long?long)getTotalMemorySize?{

return?[NSProcessInfo?processInfo].physicalMemory;

}

11. 獲取當(dāng)前可用內(nèi)存

///?獲取當(dāng)前可用內(nèi)存

+?(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. 獲取精準(zhǔn)電池電量

///?獲取精準(zhǔn)電池電量

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

///?獲取電池當(dāng)前的狀態(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. 獲取設(shè)備當(dāng)前的語言

///?獲取當(dāng)前語言

+?(NSString?*)getDeviceLanguage?{

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

return?[languageArray?objectAtIndex:0];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姚垃,一起剝皮案震驚了整個濱河市念链,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌积糯,老刑警劉巖掂墓,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異看成,居然都是意外死亡君编,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門川慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吃嘿,“玉大人,你說我怎么就攤上這事窘游∵胪郑” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵忍饰,是天一觀的道長贪嫂。 經(jīng)常有香客問我,道長艾蓝,這世上最難降的妖魔是什么力崇? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赢织,結(jié)果婚禮上亮靴,老公的妹妹穿的比我還像新娘。我一直安慰自己于置,他們只是感情好茧吊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著八毯,像睡著了一般搓侄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上话速,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天讶踪,我揣著相機(jī)與錄音,去河邊找鬼泊交。 笑死乳讥,一個胖子當(dāng)著我的面吹牛柱查,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播云石,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼唉工,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了留晚?” 一聲冷哼從身側(cè)響起酵紫,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎错维,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄唬,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赋焕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仰楚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隆判。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧界,靈堂內(nèi)的尸體忽然破棺而出侨嘀,到底是詐尸還是另有隱情,我是刑警寧澤捂襟,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布咬腕,位于F島的核電站,受9級特大地震影響葬荷,放射性物質(zhì)發(fā)生泄漏涨共。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一宠漩、第九天 我趴在偏房一處隱蔽的房頂上張望举反。 院中可真熱鬧,春花似錦扒吁、人聲如沸火鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魁索。三九已至,卻和暖如春晨逝,著一層夾襖步出監(jiān)牢的瞬間蛾默,已是汗流浹背创倔。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工挖炬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霹菊,地道東北人椭住。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像牧挣,于是被迫代替她去往敵國和親急前。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容