iOS 獲取設備的各種信息的方法

来源:http://www.cnblogs.com/lurenq/archive/2017/08/29/7449194.html
-Advertisement-
Play Games

一、目錄結構: 獲取屏幕寬度與高度 獲取設備版本號 獲取iPhone名稱 獲取app版本號 獲取電池電量 獲取當前系統名稱 獲取當前系統版本號 獲取通用的唯一識別碼UUID 獲取當前設備IP 獲取總記憶體大小 獲取當前可用記憶體 獲取精準電池電量 獲取電池當前的狀態(共有4種狀態) 獲取設備當前的語言 ...


一、目錄結構:

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們一般使用webpack熱載入開發SPA應用,但工作中難免會遇到一些多頁面的demo或項目。 故參考 kingvid-chan 的代碼,搭了一個使用HRM開發多頁面web應用的腳手架,剛好也進一步學習webpack。 項目結構很簡單,需要註意的是: 因使用fs等api,所以每次添加新頁面之後,需要 ...
  • [1]效果演示 [2]功能分析 [3]靜態時鐘 [4]動態效果 [5]完整代碼 ...
  • var csns=document.getElementById("csns"); var tcx=csns.getContext("2d"); csns.style.border="1px red solid"; tcx.strokeStyle="#1296DB" tcx.beginPath();... ...
  • router.js html: ...
  • 先聲明下:本文中的switch僅限於JS,我並未查閱過其他編程語言中switch的語法,但有朋友反映在OC中並不適用! 一、switch語句基礎概念 屬於選擇結構,一般用於選擇要執行的多個代碼塊之一。 基本語法 工作原理:首先設置表達式 ,通常是一個變數。隨後表達式的值會與結構中的每個 case 的 ...
  • 網上一查,肯定搜索到繼承的文章真心不少。我這裡就只說一下自己常用的方式: 通常 在編寫一個類的做法是,在構造函數里聲明欄位,在prototype里指定方法。 demo: ...
  • 數組去重 方法一 數組去重 方法一 //利用 filter var arr = [1,4,2,5,6,4,2,7] var arr1 = arr.filter(function(element, index, self){ return self.indexOf(element) == index ...
  • 1、UIBezierPath(貝塞爾曲線) 1-1)、在重寫 drawRect: 方法里使用 使用不難,看 UIBezierPath.h 基本都會用,值得註意的是,顏色設置如下: 下麵是學習過程中的代碼 1-2)、在普通方法里使用,需要畫布。配合 CAShapeLayer 。 註意:1、設置線寬、顏 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...