2010-03-15 110 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