ios开发之--判断当前设备的类型

来源:互联网 发布:大承网络 空中网 编辑:程序博客网 时间:2024/06/05 22:49

http://hi.baidu.com/myyuchong/item/77f2f750a9e9553433e0a985


ios开发之--判断当前设备的类型



+ (NSString*)getDeviceVersion
{
    size_t size;
    sysctlbyname("hw.machine",NULL, &size,NULL, 0);
    char*machine = (char*)malloc(size);
    sysctlbyname("hw.machine", machine, &size,NULL, 0);
    NSString*platform = [NSStringstringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    returnplatform;
}
输出:
//@"iPad1,1" 
//@"iPad2,1" 
//@"i386"

逗号后面数字解释:(i386是指模拟器)
1-WiFi版
2-GSM/WCDMA 3G版
3-CDMA版

AppleTV(2G) (AppleTV2,1)
iPad (iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone (iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)

另外放两个固件下载地址:
http://apple.178.com/ios/
http://ipad.sj.91.com/ios/

判断ipad/iphone
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone

?
或者
[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];
?
判断设备是否有摄像头
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
?

---------------

NSString *nibTitle = @"PadContent"; //iPad
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
 {

//iPhone
  nibTitle = @"PhoneContent";
    }

----------

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
   { 
       CGSize result = [[UIScreen mainScreen] bounds].size; 
        
       if(result.height == 480.f) 
       { 
           return @"ViewController"; 
       } 
       else 
       { 
           return @"ViewController-iPhone5"; 
       } 
   } 
 
   return @"ViewController-iPad"; 

------------------

NSString *dangqianshebei=[NSString stringWithFormat:@"%@",[[UIScreen mainScreen]preferredMode]];

NSRange this=[dangqianshebei rangeOfString:@"2048"];
if (this.location != NSNotFound) {
      NSLog(@"ipad3");
 }else {
      this=[dangqianshebei rangeOfString:@"1024"];
      if (this.location != NSNotFound) {
                NSLog(@"ipad2");
      }else {
               this=[dangqianshebei rangeOfString:@"960"];
               if (this.location != NSNotFound) {
               NSLog(@"iphone高清");
               }else {
                     this=[dangqianshebei rangeOfString:@"480"];
                     if (this.location != NSNotFound) {
                             NSLog(@"iphone小屏");
                     }else {                       
                           NSLog(@"其他");
                     }
                }
         }            
}

---------

请注意,如果你在创建项目的时候只支持一种设备类型,上面的语句将始终返回选定ios设备类型,如项目只支持iPhone,即使在iPad上运行,前述的代码依然返回iPhone设备类型。


执行环境

我们可以从 UIDevice 的属性 model 得到在现在执行的环境。

[cpp] view plaincopy

NSString *modelname = [[UIDevice currentDevice]model];   

if ([modelname isEqualToString:@"iPhone"]) {   

// iPhone  

}   

if ([modelname isEqualToString:@"IPod Touch"]) {   

// iPod touch}   

if ([modelname isEqualToString:@"iPhone Simulator"]) {   

// iPhone Simulator  

}  



或者也可以这样:

[cpp] view plaincopy

#import <TargetConditionals.h>   

#if TARGET_OS_IPHONE   

// iPhone Device  

#endif   

#if TARGET_IPHONE_SIMULATOR   

// iPhone Simulator  

#endif   

#if !TARGET_IPHONE_SIMULATOR   

// iPhone Device  

#endif  



iPhone 机器版本的区分

可以通过 uname 函数取得当前机器的版本。

[cpp] view plaincopy

struct utsname u;   

uname(&u);   

NSString *machine = [NSStringstringWithCString:u.machine];   

if ([machine isEqualToString:@"iPhone1,1"]) {   

// iPhone 1G  

}  

if ([machine isEqualToString:@"iPhone1,2"]) {   

// iPhone 3G  

}   

if ([machine isEqualToString:@"iPhone2,1"]) {   

// iPhone 3GS  

}   

if ([machine isEqualToString:@"iPod1,1"]) {   

// iPod touch 1G  

}   

if ([machine isEqualToString:@"iPod2,1"]) {  

 // iPod touch 2G  

}  

 if([machine isEqualToString:@"iPod3,1"]) {   

// iPod touch Late2009  

}  


iPhone OS 版本区分

可以使用 UIDevice 的属性 systemVersion 来得到。

[cpp] view plaincopy

   

 NSString *osversion = [UIDevice currentDevice].systemVersion;   

if ([osversion isEqualToString:@"2.1"]) {   

// iPhone  

}   

if ([osversion isEqualToString:@"2.2.1"])   

  

{   

// iPod touch  

}   

if ([osversion isEqualToString:@"3.0"]) {   

// iPhone Simulator  

}  


=================

@@@@@

苹果的每个产品都有几个类型,从iphone到ipod、ipad,而每个产品又有几个类型,从iphone2G到iphone5,从iPod touch1到iPod touch5,从ipad1到ipad4,只有你想不到的,没有人家做不到的。

但是在做ios开发中如何检测这些类型呢?下边的方法就是CSDN问答中给出的方法,原问题见:http://ask.csdn.net/questions/997
 #include <sys/sysctl.h>

Objective C code?

- (NSString *) platformString{
    // Gets a string with the device model
    size_t size;  
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);  
    char *machine = malloc(size);  
    sysctlbyname("hw.machine", machine, &size, NULL, 0);  
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];  
    free(machine); 
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 2G";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"iPhone 4 (CDMA)";    
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
 
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch (1 Gen)";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch (2 Gen)";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch (3 Gen)";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch (4 Gen)";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch (5 Gen)";
 
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad1,2"])      return @"iPad 3G";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
 
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
}

http://ask.csdn.net/questions/997


原创粉丝点击