• (转)检测iPhone/iPod Touch/iPad设备类型


    更新了一下,支持iPhone4和iPad,iPod Touch4

    #import <Foundation/Foundation.h>
    #import <sys/utsname.h>

    enum {
        MODEL_UNKNOWN,
        MODEL_IPHONE_SIMULATOR,
        MODEL_IPOD_TOUCH,
        MODEL_IPOD_TOUCH_2G,
        MODEL_IPOD_TOUCH_3G,
        MODEL_IPOD_TOUCH_4G,
        MODEL_IPHONE,
        MODEL_IPHONE_3G,
        MODEL_IPHONE_3GS,
        MODEL_IPHONE_4G,
        MODEL_IPAD
    };

    @interface DeviceDetection : NSObject

    + (uint) detectDevice;
    + (int) detectModel;

    + (NSString *) returnDeviceName:(BOOL)ignoreSimulator;
    + (BOOL) isIPodTouch;
    + (BOOL) isOS4;
    + (BOOL) canSendSms;

    @end


    #import "DeviceDetection.h"
    #import <MessageUI/MessageUI.h>
    #include <sys/types.h>
    #include <sys/sysctl.h>

    @implementation DeviceDetection

    + (BOOL) isIPodTouch
    {
        int model = [DeviceDetection detectDevice];
        if (model == MODEL_IPOD_TOUCH || model == MODEL_IPAD){
            //|| model == MODEL_IPHONE_SIMULATOR){
            return YES;
        }    
        else {
            return NO;
        }

    }

    + (BOOL) isOS4
    {
        // TBD
        
        return YES;
        
    }

    + (BOOL)canSendSms
    {
        return [MFMessageComposeViewController canSendText];
    }

    + (NSString *)platform{
        size_t size;
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        char *machine = malloc(size);
        sysctlbyname("hw.machine", machine, &size, NULL, 0);
        NSString *platform = [NSString stringWithUTF8String:machine];
        free(machine);
        return platform;
    }

    + (int) detectModel{
        NSString *platform = [DeviceDetection platform];
        
        if ([platform isEqualToString:@"iPhone1,1"])   
            return MODEL_IPHONE;
        
        if ([platform isEqualToString:@"iPhone1,2"])   
            return MODEL_IPHONE_3G;
        
        if ([platform isEqualToString:@"iPhone2,1"])
            return MODEL_IPHONE_3GS;
        
        if ([platform isEqualToString:@"iPhone3,1"])    
            return MODEL_IPHONE_4G;
        
        if ([platform isEqualToString:@"iPod1,1"])      
            return MODEL_IPOD_TOUCH;
        
        if ([platform isEqualToString:@"iPod2,1"])      
            return MODEL_IPOD_TOUCH_2G;
        
        if ([platform isEqualToString:@"iPod3,1"])      
            return MODEL_IPOD_TOUCH_3G;
        
        if ([platform isEqualToString:@"iPod4,1"])      
            return MODEL_IPOD_TOUCH_4G;
        
        if ([platform isEqualToString:@"iPad1,1"])      
            return MODEL_IPAD;
        
        if ([platform isEqualToString:@"i386"])         
            return MODEL_IPHONE_SIMULATOR;
        
        return MODEL_UNKNOWN;
    }


    + (uint) detectDevice {
        NSString *model= [[UIDevice currentDevice] model];
        
        // Some iPod Touch return "iPod Touch", others just "iPod"
        
        NSString *iPodTouch = @"iPod Touch";
        NSString *iPodTouchLowerCase = @"iPod touch";
        NSString *iPodTouchShort = @"iPod";
        NSString *iPad = @"iPad";
        
        NSString *iPhoneSimulator = @"iPhone Simulator";
        
        uint detected;
        
        if ([model compare:iPhoneSimulator] == NSOrderedSame) {
            // iPhone simulator
            detected = MODEL_IPHONE_SIMULATOR;
        }
        else if ([model compare:iPad] == NSOrderedSame) {
            // iPad
            detected = MODEL_IPAD;
        } else if ([model compare:iPodTouch] == NSOrderedSame) {
            // iPod Touch
            detected = MODEL_IPOD_TOUCH;
        } else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) {
            // iPod Touch
            detected = MODEL_IPOD_TOUCH;
        } else if ([model compare:iPodTouchShort] == NSOrderedSame) {
            // iPod Touch
            detected = MODEL_IPOD_TOUCH;
        } else {
            // Could be an iPhone V1 or iPhone 3G (model should be "iPhone")
            struct utsname u;
            
            // u.machine could be "i386" for the simulator, "iPod1,1" on iPod Touch, "iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G
            
            uname(&u);
            
            if (!strcmp(u.machine, "iPhone1,1")) {
                detected = MODEL_IPHONE;
            } else if (!strcmp(u.machine, "iPhone1,2")){
                detected = MODEL_IPHONE_3G;
            } else if (!strcmp(u.machine, "iPhone2,1")){
                detected = MODEL_IPHONE_3GS;
            } else if (!strcmp(u.machine, "iPhone3,1")){
                detected = MODEL_IPHONE_4G;
            }
        }
        return detected;
    }

    + (NSString *) returnDeviceName:(BOOL)ignoreSimulator {
        NSString *returnValue = @"Unknown";
        
        switch ([DeviceDetection detectDevice]) {
            case MODEL_IPHONE_SIMULATOR:
                if (ignoreSimulator) {
                    returnValue = @"iPhone 3G";
                } else {
                    returnValue = @"iPhone Simulator";
                }
                break;
            case MODEL_IPOD_TOUCH:
                returnValue = @"iPod Touch";
                break;
            case MODEL_IPHONE:
                returnValue = @"iPhone";
                break;
            case MODEL_IPHONE_3G:
                returnValue = @"iPhone 3G";
                break;
            default:
                break;
        }
        
        return returnValue;
    }

    @end

  • 相关阅读:
    360抢票王验证码自动识别真的那么牛吗?
    wpf 的各个template
    HTML/CSS实现的一个列表页
    泛型约束和利用反射修改对象属性的值
    KindEditor富文本编辑器, 从客户端中检测到有潜在危险的 Request.Form 值
    检查对象是否为NULL或者为Empty
    【笔记】WPF实现ViewPager引导界面效果及问题汇总
    【笔记】WPF之模板控件应用
    【笔记】W3C CSS关键属性
    【转】Web标准中的常见问题
  • 原文地址:https://www.cnblogs.com/greywolf/p/2693404.html
Copyright © 2020-2023  润新知