2013-09-24 46 views
7

试图找到一种方法来检测M7的存在。如何检测M7是否存在,又如iPhone 5S或更新?

如果M7不存在,查询CMStepCounter或CMMotionActivity类没有意义吗?我的猜测是,在iOS7的非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"]) { 

} 
+0

对于非M7模型(除5S以外的任何模型),这些类似乎没有获取数据。他们需要M7芯片。检查isStepCountingAvailable或isActivityAvailable如下似乎工作。 – Jackson

回答

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将为零,因此[CMStepCounter isStepCountingAvailable]将返回false。 ([CMMotionActivityManager isActivityAvailable]也一样) – clarkcox3

+1

CMStepCounter在iOS 8中已被弃用.Codeed计数器用于替代。 [CMPedometer isStepCountingAvailable]与其前身相同。类参考:https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –

相关问题