iOS代码技巧之判断设备及状态

来源:互联网 发布:成都培训java多少人 编辑:程序博客网 时间:2024/06/05 11:46

目录[-]

  • 一、判断设备
  • 二、判断网络连接状态
  • 三、设备不显示的解决办法
  • 一、判断设备 

    //设备名称return [UIDevice currentDevice].name;//设备型号,只可得到是何设备,无法得到是第几代设备return [UIDevice currentDevice].model;//系统版本型号,如iPhone OS return [UIDevice currentDevice].systemVersion;//系统版本名称,如6.1.3return [UIDevice currentDevice].systemName;
    //判断是否为iPhone#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)//判断是否为iPad#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)//判断是否为ipod#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])//判断是否为iPhone5#define IS_IPHONE_5_SCREEN [[UIScreen mainScreen] bounds].size.height >= 568.0f && [[UIScreen mainScreen] bounds].size.height < 1024.0f

    二、判断网络连接状态 

    1、导入SystemConfiguration.framework,并#import<SystemConfiguration/SCNetworkReachability.h>

    2、判断设备是否联网 

    + (BOOL)connectedToNetwork{        //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态        struct sockaddr_storage zeroAddress;        bzero(&zeroAddress, sizeof(zeroAddress));    zeroAddress.ss_len = sizeof(zeroAddress);    zeroAddress.ss_family = AF_INET;        // Recover reachability flags    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);    SCNetworkReachabilityFlags flags;        //获得连接的标志    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);    CFRelease(defaultRouteReachability);        //如果不能获取连接标志,则不能连接网络,直接返回    if (!didRetrieveFlags)    {        return NO;    }    //根据获得的连接标志进行判断    BOOL isReachable = flags & kSCNetworkFlagsReachable;    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;    return (isReachable&&!needsConnection) ? YES : NO;}

    三、设备不显示的解决办法

    PS:如果设备已经插上,但是XCode不显示当前设备,仍为iOS Device的状态,如下图所示

    解决步骤

    1.点击XCode右上角的Organizer->Devices,看自己的设备是否为绿灯状态,如果为黄灯或是没有灯,说明设备未连接好,请重新再插一次 

    2.如果设备已经连接好,但是还是不显示,则说明是系统版本不匹配,如果设备是ios5的系统,则XCode的iOS Deployment Target 必须是5.0或以上,XCode才可分辨此设备 

    选中TARGETS->Summary-Deployment Target 修改iOS版本号(假设设为6.1) 

    如果还是不识别,在PROJECT->Info->iOS Deployment Target下将版本号也修改为6.1 



    使用  UI_USER_INTERFACE_IDIOM() 进行区分  (ios 3.2 >=)  无法区分iphone和ipod

     

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

           // <define your constants here>

        } else {

          //  <define your constants here>

        }

     

    区分目前UI_USER_INTERFACE_IDIOM()有2个返回值

    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad    


    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone    


     

    使用 UIDevice.model 进行区分  (ios 2.0 >=)

     

        NSString *deviceType = [UIDevice currentDevice].model;

        

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

            //iPhone

        }

        else if([deviceType isEqualToString:@"iPod touch"]) {

            //iPod Touch

        }

        else {

            //iPad

        }


     

    使用系统的一个函数sysctlbyname 来获取设备名称

    - (NSString *) platformString

    {

        size_t size;

        sysctlbyname("hw.machine"NULL, &size, NULL0);

        char *machine = malloc(size);

        sysctlbyname("hw.machine", machine, &size, NULL0);

        NSString *platform = [NSString stringWithUTF8String:machine];

        free(machine);

        if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";

        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,3"])    return @"Verizon iPhone 4";

        if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";

        if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";

        if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";

        if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";

        if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";

        if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";

        if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";

        if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";

        if ([platform isEqualToString:@"i386"])         return @"Simulator";

        return @"";

    }


    在添加一些收集到的

    //iPhone
        if ([deviceString isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
        if ([deviceString isEqualToString:@"iPhone5,1"])    return @"iPhone 5(AT&T)";
        if ([deviceString isEqualToString:@"iPhone5,2"])    return @"iPhone 5(GSM/CDMA)";
    //iPod Touch
        if ([deviceString isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";
    //iPad
        if ([deviceString isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
        if ([deviceString isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
        if ([deviceString isEqualToString:@"iPad2,7"])      return @"iPad Mini (CDMA)";
        if ([deviceString isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
        if ([deviceString isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM)";
        if ([deviceString isEqualToString:@"iPad3,3"])      return @"iPad 3 (CDMA)";
        if ([deviceString isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
        if ([deviceString isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
        if ([deviceString isEqualToString:@"iPad3,6"])      return @"iPad 4 (CDMA)";
    //Simulator
        if ([deviceString isEqualToString:@"i386"])         return @"Simulator";
        if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";




    转载的没有那么多个机型逐个实验.所以不敢保证都正确.


    0 0
    原创粉丝点击