2010-08-16 67 views
1

如何判斷應用程序是否在iPhone 4或iPhone 3GS或iPad上運行?確定適用於iPhone的硬件

我想確定我正在使用哪個硬件,然後提供其他功能,如果它是iPhone 4(如使用視頻燈或陀螺儀傳感器)。

任何幫助將不勝感激。

感謝

PS:我期待以編程方式確定這一點,並不能確定是否基於物理外觀。

+0

這看起來是這個SO問題的重複:http://stackoverflow.com/questions/2884391/api-to-determine-whether-running-on-iphone-or-ipad – 2010-08-16 13:45:35

+0

Idion宏沒有告訴我它是iPhone 4還是iPhone 3GS 它告訴我我是否在iPad或iPhone或iPod Touch上 – 2010-08-16 14:54:03

+0

在您的項目文件的構建設置(右鍵單擊項目並選擇獲取信息)下,查看目標設備系列。我相信你需要將它設置爲iPhone/iPad(通用二進制)才能使其正常工作。 – 2010-08-16 17:05:36

回答

5

RE:示例代碼來檢測一個閃光可用

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

但嚴重的是,夥計,弗拉基米爾給你的類名和方法名。如果您打開了文檔,那麼您本可以很快地發現它 - 比等待某人粘貼五行代碼快得多。

+0

我無法編譯這個模擬器。其他人有類似的問題? – PEZ 2010-10-04 20:24:00

+0

這實際上是一個非常普遍的問題 - 在SDK 4及更高版本中(可能在以前的版本中,但在此之前我沒有使用它,所以我不能肯定地說)沒有i386版本的AVFoundation,或者最少的部分。我發現的唯一解決方案是將所有AVFoundation代碼包裝在#if!TARGET_IPHONE_SIMULATOR中 – Lurch 2010-11-05 06:22:45

6

而不是確定設備模型您應該找到並使用API​​檢查是否需要功能可用。例如用於flash的AVCaptureDevice的hasFlash屬性和用於陀螺儀的CMMotionManager的gyroAvailable屬性。

如果您的應用程序可以在iOS4之前的iOS上運行,您還應該執行額外的檢查,如果上面列出的屬性和類在運行時可用。

+0

你有一些示例代碼來顯示它是否有Flash? – 2010-08-16 14:45:19

+0

對不起,現在不能做 - 將嘗試使它後來你仍然需要它 – Vladimir 2010-08-16 15:31:20

+1

Cocoa Dev:請注意,弗拉基米爾指的是相機上的** flash **功能,而不是** Flash Player ** ,這在iOS上不存在。 – 2010-08-17 08:36:02