【问题标题】:Determine the hardware for iPhone确定 iPhone 的硬件
【发布时间】:2010-08-16 13:35:56
【问题描述】:

如何判断应用程序是在 iPhone 4、iPhone 3GS 还是 iPad 上运行?

我想确定我使用的是哪种硬件,如果是 iPhone 4,我想提供额外的功能(例如使用视频灯或陀螺仪传感器)。

任何帮助将不胜感激。

谢谢

PS:我希望以编程方式确定这一点,而不是根据外表来确定。

【问题讨论】:

  • 这看起来是这个 SO 问题的副本:stackoverflow.com/questions/2884391/…
  • Idion 宏不会告诉我是 iPhone 4 还是 iPhone 3GS 它会告诉我我使用的是 iPad、iPhone 还是 iPod Touch
  • 在项目文件的构建设置下(右键单击项目并选择获取信息),查看目标设备系列。我相信您需要将其设置为 iPhone/iPad(通用二进制)才能使其正常工作。

标签: iphone cocoa-touch iphone-sdk-3.0 ios4 iphone-4


【解决方案1】:

而不是确定设备型号,您应该查找并使用 API 检查所需的功能是否可用。例如 AVCaptureDevice 的 hasFlash 属性用于 flash 和 CMMotionManager 的gyroAvailable 属性用于陀螺仪。

如果您的应用可以在 iOS4 之前的 iOS 上运行,您还应该额外检查上述属性和类是否在运行时可用。

【讨论】:

  • 对不起,现在做不到 - 稍后会尝试做,你仍然需要它
  • Cocoa Dev:请注意,Vladimir 指的是相机上的 flash 功能,而不是 Flash Player,后者在iOS。
  • 是的,我知道目前任何 iOS 设备上都没有可用的 Adob​​e Flash。我还指的是设备上的 LED 闪光灯。
【解决方案2】:

RE:检测闪存是否可用的示例代码

   for (AVCaptureDevice *cameraDevice in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
        if ([cameraDevice hasFlash]) {
            NSLog(@" Yay! A flash!"):
        }
    }

但是说真的,老兄,Vladimir 给了你类名和方法名。如果你打开了文档,你很快就会明白了——这肯定比等别人给你贴五行代码要快。

【讨论】:

  • 我无法为模拟器编译这个。其他人有类似的问题吗?
  • 这实际上是一个非常常见的问题 - 在 SDK 4 及更高版本中(可能在以前的版本中,但在那之前我没有使用它,所以我不能肯定地说)没有i386 版本的 AVFoundation,或者至少是其中的一部分。我发现的唯一解决方案是将所有 AVFoundation 代码包装在 #if !TARGET_IPHONE_SIMULATOR
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多