我正在使用M7/M8芯片的MotionActivity在多种方式,包括步骤计数。对于步骤计数,我同时查询一天的步骤,并在它们实时发生时继续请求步骤计数。
目前,在执行此代码之前,我先检查CMStepCounter isStepCountingAvailable以及一个本地覆盖标志。如果没有授予对isStepCountingAvailable的授权,我假设motionActivity将返回FALSE。这似乎不是事实,它似乎更多的是一种硬件检测。我似乎找不到其他方法来检测是否为此授予了授权。
这意味着startStepCountingUpdatesToQueue和queryStepCountStartingFrom都运行,并且返回块,但始终返回错误代码。特别是CMErrorDomain代码105。
是否有更好的方法来确定motionActivity是否未被授权?我有一些回退代码,但我更喜欢预先进行布尔检查,而不是返回块中的错误代码。
if (self.useM7IfAvailable && [CMStepCounter isStepCountingAvailable]){
self.cmStepCounter = [[CMStepCounter alloc] init];
[self.cmStepCounter startStepCountingUpdatesToQueue:self.operationQueue updateOn:1.0 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error){
if(!error){
// do something with numberOfSteps
} else {
// not authorized: CMErrorDomain code 105
}
}];
}
[self.cmStepCounter queryStepCountStartingFrom:dayStart to:dayEnd toQueue:_operationQueue withHandler:^(NSInteger numberOfSteps, NSError *error) {
if(!error){
// do something with numberOfSteps
} else {
// not authorized: CMErrorDomain code 105
}
}];发布于 2014-11-10 21:56:43
你通过检查错误来正确地做这件事。根据docs (ref/c/tdef/CMError),您将收到带有错误代码105的CMErrors,就像您看到的那样。
不幸的是,我们无法提前检查您是否获得授权,但这遵循了苹果与其他需要授权的核心级框架(如CoreLocation )的模式。其理由是,您可以在后台中获取运动步骤,然后用户可以禁用您的运动访问,您必须对该事件作出反应,这可能与您最初对未被授权时的反应相同。
https://stackoverflow.com/questions/26849983
复制相似问题