zoukankan      html  css  js  c++  java
  • 每日分享 - 检测iPhone/iPod Touch/iPad设备类型

    link address:http://www.cocoachina.com/bbs/read.php?tid=20994

    更新了一下,支持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

  • 相关阅读:
    POJ 2007 Scrambled Polygon (极角排序)
    POJ 1113 Wall (凸包 + 思维)
    POJ 2074 Line of Sight(求直线交点 + 思维)
    POJ 1584 A Round Peg in a Ground Hole(凸多边形判断 + 点是否在多边形内 + 点到线段的最短距离)
    HDU 4623 Crime (状压DP + 数学优化)
    P4755 Beautiful Pair
    CF235C Cyclical Quest
    luoguP4449 于神之怒加强版
    扩展KMP
    P4397 [JLOI2014]聪明的燕姿
  • 原文地址:https://www.cnblogs.com/xingchen/p/2271380.html
Copyright © 2011-2022 走看看