2012-11-26 2 views

답변

1

the Link에서 답을 찾기 쉽게 액세스 할 수 있도록 나 또한 여기에 그 코드를 게시 있어요.

using System; 
using System.Runtime.InteropServices; 
using MonoTouch.Foundation; 
using MonoTouch.UIKit; 

namespace Playersync_iPhone_v2 { 
public class DeviceHardware { 
    public const string HardwareProperty = "hw.machine"; 

    public enum HardwareVersion { 
     iPhone, 
     iPhone3G, 
     iPhone3GS, 
     iPhone4, 
     VerizoniPhone4, 
     iPhone4S, 
     iPod1G, 
     iPod2G, 
     iPod3G, 
     iPod4G, 
     iPad, 
     iPad2WIFI, 
     iPad2WIFI24, 
     iPad2GSM, 
     iPad2CDMA, 
     iPad3WIFI, 
     iPad3GSM, 
     iPad3CDMA, 
     iPhoneSimulator, 
     iPhone4Simulator, 
     iPadSimulator, 
     Unknown 
    } 

    [DllImport(MonoTouch.Constants.SystemLibrary)] 
    static internal extern int sysctlbyname([MarshalAs(UnmanagedType.LPStr)] string property, IntPtr output, IntPtr oldLen, IntPtr newp, uint newlen); 

    public static HardwareVersion Version { 
     get { 
      var pLen = Marshal.AllocHGlobal(sizeof(int)); 
      sysctlbyname(DeviceHardware.HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0); 

      var length = Marshal.ReadInt32(pLen); 

      if (length == 0) { 
       Marshal.FreeHGlobal(pLen); 

       return HardwareVersion.Unknown; 
      } 

      var pStr = Marshal.AllocHGlobal(length); 
      sysctlbyname(DeviceHardware.HardwareProperty, pStr, pLen, IntPtr.Zero, 0); 

      var hardwareStr = Marshal.PtrToStringAnsi(pStr); 
      var ret = HardwareVersion.Unknown; 



      if (hardwareStr == "iPhone1,1") 
       ret = HardwareVersion.iPhone; 
      else if (hardwareStr == "iPhone1,2") 
       ret = HardwareVersion.iPhone3G; 
      else if (hardwareStr == "iPhone2,1") 
       ret = HardwareVersion.iPhone3GS; 
      else if (hardwareStr == "iPhone3,1") 
       ret = HardwareVersion.iPhone4; 
      else if (hardwareStr == "iPhone3,3") 
       ret = HardwareVersion.VerizoniPhone4; 
      else if(hardwareStr == "iPhone4,1") 
       ret = HardwareVersion.iPhone4S; 
      else if (hardwareStr == "iPad1,1") 
       ret = HardwareVersion.iPad; 
      else if (hardwareStr == "iPad2,1") 
       ret = HardwareVersion.iPad2WIFI; 
      else if (hardwareStr == "iPad2,2") 
       ret = HardwareVersion.iPad2GSM; 
      else if (hardwareStr == "iPad2,3") 
       ret = HardwareVersion.iPad2CDMA; 
      else if (hardwareStr == "iPad2,4") 
       ret = HardwareVersion.iPad2WIFI24; 
      else if (hardwareStr == "iPad3,1") 
       ret = HardwareVersion.iPad3WIFI; 
      else if (hardwareStr == "iPad3,2") 
       ret = HardwareVersion.iPad3GSM; 
      else if (hardwareStr == "iPad3,3") 
       ret = HardwareVersion.iPad3CDMA; 
      else if (hardwareStr == "iPod1,1") 
       ret = HardwareVersion.iPod1G; 
      else if (hardwareStr == "iPod2,1") 
       ret = HardwareVersion.iPod2G; 
      else if (hardwareStr == "iPod3,1") 
       ret = HardwareVersion.iPod3G; 
      else if (hardwareStr == "iPod4,1") 
       ret = HardwareVersion.iPod4G; 
      else if (hardwareStr == "i386" || hardwareStr=="x86_64") { 
       if (UIDevice.CurrentDevice.Model.Contains("iPhone")) 
        ret = UIScreen.MainScreen.Bounds.Height * UIScreen.MainScreen.Scale == 960 || UIScreen.MainScreen.Bounds.Width * UIScreen.MainScreen.Scale == 960 ? HardwareVersion.iPhone4Simulator : HardwareVersion.iPhoneSimulator; 
       else 
        ret = HardwareVersion.iPadSimulator; 
      } 

      Marshal.FreeHGlobal(pLen); 
      Marshal.FreeHGlobal(pStr); 

      return ret; 
     } 
    } 
} 
} 
+0

내 게시물이 중복되었습니다. – tomfanning

+0

복제 안 함 다른 답변으로 이동하면 링크를 참조하십시오. http://stackoverflow.com/questions/10889695/how-do-i-get-the-ios-device-and-version-in-monotouch/10889966 # 10889966 –

+0

의견을 편집 한 후 질문을 편집했습니다. 또한 원본 소스를 인용하지 않습니다. – tomfanning

0

다음은 빠른 Google 검색에서 찾은 스 니펫입니다. 최신 하드웨어 업데이트를 위해 사소한 작업을 수행해야합니다.

출처 : http://www.bscheiman.org/2010/08/30/detecting-hardware-type-monotouch/

using System; 
using System.Runtime.InteropServices; 
using MonoTouch.Foundation; 
using MonoTouch.UIKit; 
namespace YourNamespace 
{ 
    public class DeviceHardware 
    { 
     public const string HardwareProperty = "hw.machine"; 

     public enum HardwareVersion 
     { 
      iPhone, 
      iPhone3G, 
      iPhone3GS, 
      iPhone4, 
      iPod1G, 
      iPod2G, 
      iPod3G, 
      iPad, 
      iPhoneSimulator, 
      iPhone4Simulator, 
      iPadSimulator, 
      Unknown 
     } 

     [DllImport(MonoTouch.Constants.SystemLibrary)] 
     static internal extern int sysctlbyname([MarshalAs(UnmanagedType.LPStr)] string property, IntPtr output, IntPtr oldLen, IntPtr newp, uint newlen); 

     public static HardwareVersion Version 
     { 
      get 
      { 
       var pLen = Marshal.AllocHGlobal(sizeof(int)); 
       sysctlbyname(DeviceHardware.HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0); 

       var length = Marshal.ReadInt32(pLen); 

       if (length == 0) 
       { 
        Marshal.FreeHGlobal(pLen); 

        return HardwareVersion.Unknown; 
       } 

       var pStr = Marshal.AllocHGlobal(length); 
       sysctlbyname(DeviceHardware.HardwareProperty, pStr, pLen, IntPtr.Zero, 0); 

       var hardwareStr = Marshal.PtrToStringAnsi(pStr); 
       var ret = HardwareVersion.Unknown; 

       if (hardwareStr == "iPhone1,1") 
        ret = HardwareVersion.iPhone; 
       else if (hardwareStr == "iPhone1,2") 
        ret = HardwareVersion.iPhone3G; 
       else if (hardwareStr == "iPhone2,1") 
        ret = HardwareVersion.iPhone3GS; 
       else if (hardwareStr == "iPhone3,1") 
        ret = HardwareVersion.iPhone4; 
       else if (hardwareStr == "iPad1,1") 
        ret = HardwareVersion.iPad; 
       else if (hardwareStr == "iPod1,1") 
        ret = HardwareVersion.iPod1G; 
       else if (hardwareStr == "iPod2,1") 
        ret = HardwareVersion.iPod2G; 
       else if (hardwareStr == "iPod3,1") 
        ret = HardwareVersion.iPod3G; 
       else if (hardwareStr == "i386") 
       { 
        if (UIDevice.CurrentDevice.Model.Contains("iPhone")) 
         ret = UIScreen.MainScreen.Bounds.Height * UIScreen.MainScreen.Scale == 960 || UIScreen.MainScreen.Bounds.Width * UIScreen.MainScreen.Scale == 960 ? HardwareVersion.iPhone4Simulator : HardwareVersion.iPhoneSimulator; 
        else 
         ret = HardwareVersion.iPadSimulator; 
       } 

       Marshal.FreeHGlobal(pLen); 
       Marshal.FreeHGlobal(pStr); 

       return ret; 
      } 
     } 
    } 
} 
+0

아이폰 5는 어떨까요? – dimka87il

+0

"최신 하드웨어 라운드 업데이트가 쉬워야합니다." – tomfanning

관련 문제