我如何在MonoTouch的iOS设备和版本 [英] How do I get the iOS Device and Version in Monotouch

查看:167
本文介绍了我如何在MonoTouch的iOS设备和版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎么能确定的iPhone,iPod,iPad的型号是用我的应用程序?我想获得像输出:iPhone,iPhone 3G,iPhone 3GS的等

How can I determine what iPhone, iPod, iPad Model is using my application? I would like to get output like: iPhone, iPhone 3G, iPhone 3GS etc

喜欢这个答案,为纯目标C:的回答我的目标C

Like this answer for plain objective C: Answer to my question in Objective C

推荐答案

把这个例如并更新到iOS设备和模拟器的当前目录为3月24日下午3时PST的。享受

Took this example and updated it to the current list of iOS Devices and Simulators as of March 24th 3PM PST. Enjoy.

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;
        }
    }
}
}

这篇关于我如何在MonoTouch的iOS设备和版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆