【问题标题】:Find which ios device being used查找正在使用的 ios 设备
【发布时间】:2012-04-11 06:19:30
【问题描述】:

在我的应用程序中,我需要找到正在使用的 ios 设备。现在我正在使用 ios sdk 5.1

struct utsname systemInfo;
uname(&systemInfo);
NSString *platform=[NSString stringWithCString:systemInfo.machine
                                      encoding:NSUTF8StringEncoding]; 

以上代码在 ios SDK 5.0 中完美运行,但在 ios 5.1 中无法运行。 我如何在 ios 5.1 中找到设备版本,例如 iphone 3/3G/4/4s 或 ipad/ipad2 等。

【问题讨论】:

  • 问题已经得到解答。但是对于将来,对于所有设备统计信息,您可以使用发布的代码。尝试并检查一次。

标签: iphone version device ios5.1


【解决方案1】:
NSString *device = [[UIDevice currentDevice]model ] ;
NSLog(@"%@",device);

它为您提供设备名称(iPhone、iPad)

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
NSLog(@"%f",version);

它为您提供 ios 版本。不是设备名称。

【讨论】:

  • @Chinthu if the device is iphone 4s na.what is the version it shows
【解决方案2】:

UIDevice 类可以告诉您很多有关当前设备及其操作系统的信息,并且可能比unamesysctl 等POSIX API 更值得信赖,可以返回有关未来设备/iOS 版本的有用信息。

但是,您不应使用设备名称来确定是否激活应用中的功能。这将导致您的应用程序在较新的设备上失败,并且您的客户会不高兴。例如,不久前,一些应用程序正在测试名为“iPhone 4”的设备,以启用 Retina 显示图形……当第四代 iPod touch 和 iPhone 4S 出现类似显示器时,这些应用程序并不能很好地适应.

相反,测试您需要的功能UIDevice 了解屏幕尺寸和外形尺寸(又名“用户界面习语”,iPhone/iPod 与 iPad)。定位服务可以告诉您设备可以提供什么样的定位精度。 AVFoundation 可以告诉您是否拥有仅静态或摄像机以及它可以提供的分辨率。一般来说,您可以查看您正在使用的 API 来确定设备是否支持该功能。

【讨论】:

  • 旧答案,但他绝对有道理。没有人可以保证 posix api 将来可以访问,并且猜测未知的 futuredevice 很容易出错。最好坚持使用 UIDevice。
【解决方案3】:
// To decide whether device is iPhone-4 or 3
#include <sys/types.h>
#include <sys/sysctl.h>


@interface UIDevice(Hardware)

- (NSString *) platform;

- (BOOL)hasRetinaDisplay;

- (BOOL)hasCamera;



@end

@implementation UIDevice(Hardware)

- (NSString *) platform{
        int mib[2];
        size_t len;
        char *machine;

        mib[0] = CTL_HW;
        mib[1] = HW_MACHINE;
        sysctl(mib, 2, NULL, &len, NULL, 0);
        machine = malloc(len);
        sysctl(mib, 2, machine, &len, NULL, 0);

        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
        return platform;
}



- (BOOL)hasRetinaDisplay {
          NSString *platform = [self platform];
          BOOL ret = YES;
          if ([platform isEqualToString:@"iPhone1,1"]) {
               ret = NO;
          }
          else
               if ([platform isEqualToString:@"iPhone1,2"])    ret = NO;
          else 
               if ([platform isEqualToString:@"iPhone2,1"])    ret = NO;
          else 
               if ([platform isEqualToString:@"iPod1,1"])      ret = NO;
          else
               if ([platform isEqualToString:@"iPod2,1"])      ret = NO;
          else
               if ([platform isEqualToString:@"iPod3,1"])      ret = NO;
       return ret;
}

- (BOOL)hasMultitasking {
       if ([self respondsToSelector:@selector(isMultitaskingSupported)]) {
            return [self isMultitaskingSupported];
      }
      return NO;


}

- (BOOL)hasCamera {
       BOOL ret = NO;
      // check camera availability
      return ret;
}

@end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2013-11-05
    • 2018-02-20
    • 2014-11-25
    • 2013-02-09
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多