en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

2.22.2013

取得裝置平台類型或版本名稱的方法

在很多時候我們會需要辨識不同的裝置來採取不同的對應措施,這裡指的「裝置」並非 iOS 版本,而是指該機器本身,至於我們要如何辨識這些裝置的 Platform Name,請看以下程式碼說明。


詳細規格
首先先匯入兩個與 System 有關的標頭檔。

#import <sys/types.h>
#import <sys/sysctl.h>

接下來在對應的按鈕事件中鍵入以下程式碼,來取得初步的機器版本。

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);

char *machine = (char *)malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);

NSString *platform = [NSString stringWithCString:machine
    encoding:NSASCIIStringEncoding];

//別忘記釋放
free(machine);

//將結果顯示於畫面
[self showMyDevicePlatform:platform];

最後我們將呼叫一個自行定義的函式,用來處理所取得的機器版本並顯示於畫面上,您可能會問為什麼需要這麼麻煩,原因是這裡所取得的「機器版本」和目前「市售的商品名稱」有著很大的出入,以我們目前所收集到的資料可以歸類成下列幾項(2013/2/22)。

機器版本      市售的商品名稱

i386         iOS 模擬器(i386)
x86_64       iOS 模擬器(x86_64)

iPhone1,1    iPhone 1G
iPhone1,2    iPhone 3G
iPhone2,1    iPhone 3Gs
iPhone3,1    iPhone 4
iPhone4,1    iPhone 4s
iPhone5,1    iPhone 5

iPod1,1      iPod touch 1
iPod2,1      iPod touch 2
iPod3,1      iPod touch 3
iPod4,1      iPod touch 4

iPad1,1      iPad
iPad2,1      iPad 2


iPhone 或是 iPad
如果只是單純想要辨識使用的裝置為 iPhone 或是 iPad,就不需要上述這樣麻煩的設定,可以使用下列程式碼來判斷,由使用者介面大小得知目前的裝置(模擬器也適用)。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    //判斷為 iPhone 介面裝置
}

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    //判斷為 iPad 介面裝置
}


ps:想得知使用者介面大小的詳細資訊,可以參考取得畫面工作區域的大小一文。


模擬器或是實體裝置
另外,在模擬器和實體裝置的辨別上,則可以透過前端處理程式 Preprocessor 或是 UIDevice 來判斷。
#if TARGET_IPHONE_SIMULATOR

    NSLog(@"使用為模擬器執行");

#endif

若要判斷實體裝置請使用「!TARGET_IPHONE_SIMULATOR」或是「#else」敘述,切勿使用 TARGET_OS_IPHONE(用來判斷是否是 iOS 應用程式)。

最後,在 UIDevice 方面,則可以透過 modle 所回傳的字串來判斷是實體裝置或是模擬器。
[[UIDevice currentDevice] model]

ps:關於前端處理程式 Preprocessor 或是 UIDevice 的更多資訊,請參考前端處理程式 Preprocessor 一文與關於 UIDevice 的二三事一文。






沒有留言:

張貼留言