如何检测M7是否存在,即它是iPhone 5S或更新版本?

7

尝试寻找一种检测M7是否存在的方法。

如果没有M7,查询CMStepCounter或CMMotionActivity类是否是无意义的?我猜想,在iOS 7.0上,非M7型号使用这些类获得数据的效率不高,并且会消耗更多的电池。

一个简单的方法是:

struct utsname systemInfo;

uname(&systemInfo);

model =  [[NSString alloc] initWithCString:systemInfo.machine
                                      encoding:NSUTF8StringEncoding];

version =  [[NSString alloc] initWithString:[[UIDevice currentDevice] systemVersion]];


if ([model compare:@"iPhone6,1"]) {

}

在非M7型号(除了5S之外的任何型号)上,这些类似乎无法获取数据。它们需要M7芯片。检查以下两个函数isStepCountingAvailable或isActivityAvailable似乎可以解决问题。 - Jackson
1个回答

17

使用苹果提供的API:

if ([CMStepCounter isStepCountingAvailable]) {
    // The device supports step counting
} else {
    // The device does not support step counting
}

if ([CMMotionActivityManager isActivityAvailable]) {
    // You can use CMMotionActivity
} else {
    // Nope, not supported
}

当然,这个API仅适用于iOS 7或更高版本。所以如果您需要支持iOS 5或6,则需要在检查CMStepCounter类之前将此代码包装起来。


2
实际上,您不需要显式检查类。如果您使用的是iOS 6或更早版本,则[CMStepCounter isStepCountingAvailable]将返回false,因为CMStepCounter将为nil。(对于[CMMotionActivityManager isActivityAvailable]也是如此) - clarkcox3
1
CMStepCounter在iOS 8中已被弃用,现在使用CMPedometer替代。[CMPedometer isStepCountingAvailable]与其前身相同。类参考:https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html - MÖRK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接