支持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

检测iPhone/iPod Touch/iPad设备类型相关推荐

  1. 如何从iPhone / iPod Touch / iPad连接

    如何从iPhone / iPod Touch / iPad连接 本文将介绍从iPhone / iPod Touch / iPad等设备连接到已启用L2TP over IPsec功能的PacketiX ...

  2. 【转】Downgrade iOS 4 to OS 3.1.3/3.1.2 (iPhone, iPod Touch)

    http://www.iphoneheat.com/2010/07/downgrade-ios-4-to-os-3-1-3-3-1-2-iphone-ipod-touch/ 请注意红色部分,没有备份s ...

  3. iPhone / iPod Touch 文件传输解决方案 – 开源框架:Cocoa Web Resource Project

    到目前为止,也就是iPhone SDK 2.2 ,苹果仍然没有为开发者提供一个文件传输的解决方案.如果一个应用需要为用户提供往iPhone上传文件的功能,大抵会采用下面几种方法之一: 通过一个链接从网 ...

  4. 媒体查询在iPhone iPod touch中使用safari浏览器失效的原因

    在iphone和ipod touch中使用的Safari浏览器会出现媒体查询失效这是为什么呢 这是因为在iphone中使用Safari浏览器在进行页面显示时,将窗口宽度当做980px像素进行显示.所以 ...

  5. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '57x57' pixels

    遇到这个问题问题,搜索了一圈要么不知道,要么喊改deploymenet target, 最后我是在项目属性-info-icon files(ios5)-下面添加了一个icon,然后弄了个icon.pn ...

  6. [转]iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  7. iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  8. 【转】Save SHSH Blobs for iPhone, iPad, iPod Touch with TinyUmbrella

    Using TinyUmbrella you can save SHSH blobs for iPhone 4, 3GS, 3G, iPad and iPod Touch 3G, 2G. In thi ...

  9. 检测iPhone/iPod Touch/iPad设备类型 .

    更新了一下,支持iPhone4和iPad,iPod Touch4 #import <Foundation/Foundation.h> #import <sys/utsname.h&g ...

最新文章

  1. 从0到1 html5 canvas,Html5 Canvas学习之路(五)
  2. Redis源码解析——有序整数集
  3. 解决visual studio已安装的问题
  4. NLP:利用DictVectorizer对使用字典存储的数据进行特征抽取与向量化
  5. 硅谷增长专家 Ian Thiel 来华,首次揭秘数据驱动增长的道与术
  6. SQLite.NET.0.17 的离奇之处, BUG??? BY DESIGN??
  7. mysql的等号是什么意思_整理思维——等于等于等于?{MySQL条件等号的异常}
  8. Linux 源码编译安装过程-以安装XZ解压为例
  9. 4变形物体_Houdini基础(二)曲线变形物体
  10. 安卓学习笔记44:开源框架okhttp3入门
  11. hnu 暑期实训之愚人节的礼物
  12. 25 个让 Java 程序员更高效的 Eclipse 插件
  13. Linux 用top命令查看CPU和内存使用情况
  14. python的messagebox的用法_PyQt5快速上手基础篇5-messagebox用法
  15. python模拟行星运动_动态模拟运行太阳系的行星运转
  16. 如何调用WxJump的API接口实现微信网址链接转二维码
  17. 【学生护眼台灯怎么样选择?推荐专业护眼灯热门四大品牌无标题】
  18. VS+QT——二维码生成(使用nayuki第三方库):从建工程开始
  19. 计算机页面新建,电脑PS如何新建多个画布并使其显示在一个界面
  20. excel中如何实现在年龄一栏加1即让某列数字分别加1

热门文章

  1. 360度虚拟摇杆控制机器人前进后退转弯(一)
  2. Free Pascal IDE安装
  3. (30)-- 用户注册表单验证
  4. java学生管理系统(swing) (没用数据库,附源码)
  5. 2019第十六届研究生数学建模竞赛--跨越五年从本科省二到研赛国一
  6. 扫码点餐系统源码 外卖点餐小程序源码 点餐APP全套源码
  7. 构建 PHP运行环境
  8. JAVA不直接使用指针吗_Java不直接使用指针。
  9. 上海交大计算机专业挂科,上海交大,3名本科生绩点不足1.0被勒令退学,大学不挂科很难?...
  10. QCA三天写论文!模糊集数据校准实战