如何编程检测 iPhone 4

5

你可以在这里检查链接 https://dev59.com/33A75IYBdhLWcg3wqK10 - Hiren
2个回答

11

我不想在这里讨论检测硬件型号或功能哪个更好;我认为最好的取决于一个人可能有的特定需求。无论如何,如果你想测试硬件型号,那么可以使用以下Unix系统调用:

#include <sys/utsname.h>

int uname(struct utsname *name);

struct utsname结构体成员之一是machine,一个以null结尾的字符串,用于标识硬件(关于其他成员的信息请参见man 3 uname);在iPhone 4的情况下,它将是“iPhone3,1”,在3GS中是“iPhone2,1”,在3G中是“iPhone1,2”,在第四代iPod Touch中是“iPod4,1”,第三代是“iPod3,1”,第二代是“iPod2,1”。

struct utsname platform;
int rc;

rc = uname(&platform);
if(rc == -1){
 /* handle error */
}
else{
 fprintf(stdout, "hardware platform: %s", platform.machine);
}

给你加一分是因为你实际回答了问题。有时候,知道实际设备型号是很有用的。例如,在我的应用程序中,iPhone 4处理器速度较慢,所以我需要调整一些我的功能。 - Jeff

9

不要检测设备型号,而是检测功能。

例如,如果您从提供@2x图像和普通大小图像的Web服务下载图像,则知道目前仅适用于iPhone4和iPod Touch 4,但谁能说明天不会在iAmazingMagicThingy上工作?测试功能。

使用上面的示例,测试方法如下:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] &&
   [[UIScreen mainScreen] scale] == 2.0) {
    /* do your thing */
}

我不打算详细讲解如何测试功能,但你真的应该以这种方式进行而不是测试特定模型。


这是为什么这样做更好的一个例子:您将为iPhone 4提供的功能现在也将适当地用于新的iPod touch。 - Jorge Israel Peña
因为那篇文章中的方法很脆弱,而且总是会落后于时代。如果您知道需要哪些功能,请寻找这些功能,并忽略它们所在的设备 - 认为任何具有这些功能的设备都能够运行该代码。请考虑这一点:所有能飞的东西都有翅膀,但并非所有有翅膀的东西都能飞。那么检查物体是否有翅膀并且能够支持动物飞行更有意义呢?还是列出您知道可以飞行的所有鸟类并进行比较呢?最终,您可能会发现新物种,而您的代码已经过时了。 - jer
你们说得没错,但我看了一下http://www.iphonedevsdk.com/forum/iphone-sdk-development/45032-more-ipad-landscape-launch-issues.html,他们没有考虑到iPhone 4的情况。我想我应该重新考虑如何解决这个问题。也许只需要用sleep(x)吧。 - Shai UI
或者您可以测试您需要的功能,而不考虑它出现在哪个设备上。 - jer
代码稍作修改:您需要检查UIScreen的实例是否响应选择器,而不是类本身。应该是:[[UIScreen mainScreen] respondsToSelector:@selector(scale)] - commanda
使用上面的代码,你应该使用>=而不是==,以防某种3x视网膜设备。 - kirb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接