本文介绍了如何在 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

推荐答案

接受了这个 example 并更新将其添加到截至太平洋标准时间 3 月 24 日下午 3 点的当前 iOS 设备和模拟器列表.享受.

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 设备和版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 09:02