2010-03-15 79 views
2

這是檢測用戶正在運行的設備的正確方法?檢測設備型號(iPhone/iPod Touch)的正確方法?

NSString *currentModel = [[UIDevice currentDevice] model]; 
if ([currentModel isEqualToString:@"iPhone"]) { 
    // The user is running on iPhone so allow Call, Camera, etc. 
} else { 
    // The user is running on a different device (iPod/iPad/iPhone Simulator) disallow Call. 
} 
+0

這似乎是這個問題的重複:http://stackoverflow.com/questions/688001/how-to-tell-if-your-code-is-running-on-an-iphone-or-an -iphone3g – 2010-03-15 18:06:46

回答

7

它不是一個通用的解決方案,但蘋果在許多情況下,提供API調用來請檢查是否特定功能支持或不。例子可以是:

  • UIImagePickerController+isSourceTypeAvailable:+availableMediaTypesForSourceType:讓你檢查,如果攝像頭可用於當前設備。

  • ​​in MFMailComposeViewController檢查設備是否配置爲發送郵件。

  • -canOpenURLUIApplication類,以檢查是否網址可以打開。例如,它可以被用來檢查是否有可能打個電話:

    if (![[UIApplication sharedApplication] canOpenURL: 
               [NSURL URLWithString:@"tel://"]]) 
        //We cannot make a call - hide call button here 
    

如果這樣的API調用可用於你的目的,我會用它們而不是依賴於硬編碼字符串標識符。

+0

那麼這對電話如何工作呢?我使用tel://撥打一個號碼和一個顯示號碼可以被呼叫的圖標。我不希望此圖標顯示用戶是否無法直接撥打電話。 iPad和iPod Touch就是這種情況。 – Mark 2010-03-16 14:01:36

+0

看到更新的答案 – Vladimir 2010-03-16 14:21:29

+0

非常感謝弗拉基米爾!我增加了答案號並將其標記爲答案。 – Mark 2010-03-29 08:54:39

1

我不知道我要籠統地說很多(即有可能最終是一個iPod有攝像頭,我不知道iPhone將永遠被稱爲「iPhone」)但是,是的,這是可以接受的方式。

+0

聽起來更像是一個比一個答案評論,不是嗎? – Till 2012-02-28 09:32:00

+0

他們問這是否是確定用戶正在運行的設備的方式。 「是」是如何評論的? – 2012-02-29 19:00:39