2012-06-04 3 views

답변

6

의 등 3 월 24 일 오후 3시 (태평양 표준시) 즐겨. 3 월 24 일, 2013이 코드의

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

namespace YourNamespace 
{ 
public class IOSDeviceHardware 
{ 
    public const string HardwareProperty = "hw.machine"; 

    public enum IOSHardware { 
     iPhone, 
     iPhone3G, 
     iPhone3GS, 
     iPhone4, 
     iPhone4RevA, 
     iPhone4CDMA, 
     iPhone4S, 
     iPhone5GSM, 
     iPhone5CDMAGSM, 
     iPodTouch1G, 
     iPodTouch2G, 
     iPodTouch3G, 
     iPodTouch4G, 
     iPodTouch5G, 
     iPad, 
     iPad3G, 
     iPad2, 
     iPad2GSM, 
     iPad2CDMA, 
     iPad2RevA, 
     iPadMini, 
     iPadMiniGSM, 
     iPadMiniCDMAGSM, 
     iPad3, 
     iPad3CDMA, 
     iPad3GSM, 
     iPad4, 
     iPad4GSM, 
     iPad4CDMAGSM, 
     iPhoneSimulator, 
     iPhoneRetinaSimulator, 
     iPadSimulator, 
     iPadRetinaSimulator, 
     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 IOSHardware Version { 
     get { 
      var pLen = Marshal.AllocHGlobal(sizeof(int)); 
      sysctlbyname(IOSDeviceHardware.HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0); 

      var length = Marshal.ReadInt32(pLen); 

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

       return IOSHardware.Unknown; 
      } 

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

      var hardwareStr = Marshal.PtrToStringAnsi(pStr); 

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

      if (hardwareStr == "iPhone1,1") return IOSHardware.iPhone; 
      if (hardwareStr == "iPhone1,2") return IOSHardware.iPhone3G; 
      if (hardwareStr == "iPhone2,1") return IOSHardware.iPhone3GS; 
      if (hardwareStr == "iPhone3,1") return IOSHardware.iPhone4; 
      if (hardwareStr == "iPhone3,2") return IOSHardware.iPhone4RevA; 
      if (hardwareStr == "iPhone3,3") return IOSHardware.iPhone4CDMA; 
      if (hardwareStr == "iPhone4,1") return IOSHardware.iPhone4S; 
      if (hardwareStr == "iPhone5,1") return IOSHardware.iPhone5GSM; 
      if (hardwareStr == "iPhone5,2") return IOSHardware.iPhone5CDMAGSM; 

      if (hardwareStr == "iPad1,1") return IOSHardware.iPad; 
      if (hardwareStr == "iPad1,2") return IOSHardware.iPad3G; 
      if (hardwareStr == "iPad2,1") return IOSHardware.iPad2; 
      if (hardwareStr == "iPad2,2") return IOSHardware.iPad2GSM; 
      if (hardwareStr == "iPad2,3") return IOSHardware.iPad2CDMA; 
      if (hardwareStr == "iPad2,4") return IOSHardware.iPad2RevA; 
      if (hardwareStr == "iPad2,5") return IOSHardware.iPadMini; 
      if (hardwareStr == "iPad2,6") return IOSHardware.iPadMiniGSM; 
      if (hardwareStr == "iPad2,7") return IOSHardware.iPadMiniCDMAGSM; 
      if (hardwareStr == "iPad3,1") return IOSHardware.iPad3; 
      if (hardwareStr == "iPad3,2") return IOSHardware.iPad3CDMA; 
      if (hardwareStr == "iPad3,3") return IOSHardware.iPad3GSM; 
      if (hardwareStr == "iPad3,4") return IOSHardware.iPad4; 
      if (hardwareStr == "iPad3,5") return IOSHardware.iPad4GSM; 
      if (hardwareStr == "iPad3,6") return IOSHardware.iPad4CDMAGSM; 

      if (hardwareStr == "iPod1,1") return IOSHardware.iPodTouch1G; 
      if (hardwareStr == "iPod2,1") return IOSHardware.iPodTouch2G; 
      if (hardwareStr == "iPod3,1") return IOSHardware.iPodTouch3G; 
      if (hardwareStr == "iPod4,1") return IOSHardware.iPodTouch4G; 
      if (hardwareStr == "iPod5,1") return IOSHardware.iPodTouch5G; 

      if (hardwareStr == "i386" || hardwareStr=="x86_64") 
      { 
       if (UIDevice.CurrentDevice.Model.Contains("iPhone")) 
       { 
        if(UIScreen.MainScreen.Scale > 1.5f) 
         return IOSHardware.iPhoneRetinaSimulator; 
        else 
         return IOSHardware.iPhoneSimulator; 
       } 
       else 
       { 
        if(UIScreen.MainScreen.Scale > 1.5f) 
         return IOSHardware.iPadRetinaSimulator; 
       else 
        return IOSHardware.iPadSimulator; 
       } 
      } 

      return IOSHardware.Unknown; 
     } 
    } 
} 
} 
+0

무엇을 iPad2,4에 대해? –

+0

touche,하지만 도대체 iPad2,4와 iPad 2,1의 차이점은 무엇입니까? –

+0

[Nothing really] (http://theiphonewiki.com/wiki/index.php?title=IPad) –

1

새로운 버전 :

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

namespace YourNamespace 
{ 
    public class IOSDeviceHardware 
    { 
     public const string HardwareProperty = "hw.machine"; 

     public enum IOSHardware { 
      iPhone, 
      iPhone3G, 
      iPhone3GS, 
      iPhone4, 
      iPhone4RevA, 
      iPhone4CDMA, 
      iPhone4S, 
      iPhone5GSM, 
      iPhone5CDMAGSM, 
      iPodTouch1G, 
      iPodTouch2G, 
      iPodTouch3G, 
      iPodTouch4G, 
      iPodTouch5G, 
      iPad, 
      iPad3G, 
      iPad2, 
      iPad2GSM, 
      iPad2CDMA, 
      iPad2RevA, 
      iPadMini, 
      iPadMiniGSM, 
      iPadMiniCDMAGSM, 
      iPad3, 
      iPad3CDMA, 
      iPad3GSM, 
      iPad4, 
      iPad4GSM, 
      iPad4CDMAGSM, 
      iPhoneSimulator, 
      iPhoneRetinaSimulator, 
      iPadSimulator, 
      iPadRetinaSimulator, 
      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 IOSHardware Version { 
      get { 
       var pLen = Marshal.AllocHGlobal(sizeof(int)); 
       sysctlbyname(IOSDeviceHardware.HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0); 

       var length = Marshal.ReadInt32(pLen); 

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

        return IOSHardware.Unknown; 
       } 

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

       var hardwareStr = Marshal.PtrToStringAnsi(pStr); 

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

       if (hardwareStr == "iPhone1,1") return IOSHardware.iPhone; 
       if (hardwareStr == "iPhone1,2") return IOSHardware.iPhone3G; 
       if (hardwareStr == "iPhone2,1") return IOSHardware.iPhone3GS; 
       if (hardwareStr == "iPhone3,1") return IOSHardware.iPhone4; 
       if (hardwareStr == "iPhone3,2") return IOSHardware.iPhone4RevA; 
       if (hardwareStr == "iPhone3,3") return IOSHardware.iPhone4CDMA; 
       if (hardwareStr == "iPhone4,1") return IOSHardware.iPhone4S; 
       if (hardwareStr == "iPhone5,1") return IOSHardware.iPhone5GSM; 
       if (hardwareStr == "iPhone5,2") return IOSHardware.iPhone5CDMAGSM; 

       if (hardwareStr == "iPad1,1") return IOSHardware.iPad; 
       if (hardwareStr == "iPad1,2") return IOSHardware.iPad3G; 
       if (hardwareStr == "iPad2,1") return IOSHardware.iPad2; 
       if (hardwareStr == "iPad2,2") return IOSHardware.iPad2GSM; 
       if (hardwareStr == "iPad2,3") return IOSHardware.iPad2CDMA; 
       if (hardwareStr == "iPad2,4") return IOSHardware.iPad2RevA; 
       if (hardwareStr == "iPad2,5") return IOSHardware.iPadMini; 
       if (hardwareStr == "iPad2,6") return IOSHardware.iPadMiniGSM; 
       if (hardwareStr == "iPad2,7") return IOSHardware.iPadMiniCDMAGSM; 
       if (hardwareStr == "iPad3,1") return IOSHardware.iPad3; 
       if (hardwareStr == "iPad3,2") return IOSHardware.iPad3CDMA; 
       if (hardwareStr == "iPad3,3") return IOSHardware.iPad3GSM; 
       if (hardwareStr == "iPad3,4") return IOSHardware.iPad4; 
       if (hardwareStr == "iPad3,5") return IOSHardware.iPad4GSM; 
       if (hardwareStr == "iPad3,6") return IOSHardware.iPad4CDMAGSM; 

       if (hardwareStr == "iPod1,1") return IOSHardware.iPodTouch1G; 
       if (hardwareStr == "iPod2,1") return IOSHardware.iPodTouch2G; 
       if (hardwareStr == "iPod3,1") return IOSHardware.iPodTouch3G; 
       if (hardwareStr == "iPod4,1") return IOSHardware.iPodTouch4G; 
       if (hardwareStr == "iPod5,1") return IOSHardware.iPodTouch5G; 

       if (hardwareStr == "i386" || hardwareStr=="x86_64") 
       { 
        if (UIDevice.CurrentDevice.Model.Contains("iPhone")) 
        { 
         if(UIScreen.MainScreen.Scale > 1.5f) 
          return IOSHardware.iPhoneRetinaSimulator; 
         else 
          return IOSHardware.iPhoneSimulator; 
        } 
        else 
        { 
         if(UIScreen.MainScreen.Scale > 1.5f) 
          return IOSHardware.iPadRetinaSimulator; 
        else 
         return IOSHardware.iPadSimulator; 
        } 
       } 

       return IOSHardware.Unknown; 
      } 
     } 
    } 
} 
+0

새로운 iPad Air 및 iPad Mini를 고려하여 어떻게 업데이트합니까? – Goober

1

통합 API에서 당신은 DLL 가져 오기를 업데이트해야합니다.

다음으로 교체 :

[DllImport ("libc", CallingConvention = CallingConvention.Cdecl)] 
internal static extern int sysctlbyname([MarshalAs(UnmanagedType.LPStr)] string property, // name of the property 
              IntPtr output, // output 
              IntPtr oldLen, // IntPtr.Zero 
              IntPtr newp, // IntPtr.Zero 
              uint newlen // 0 
    ); 
관련 문제