m7 / m8检测运动活动授权是否被拒绝

时间:2014-11-10 18:00:23

标签: ios authorization apple-m7

我正在以各种方式使用M7 / M8芯片的MotionActivity,包括步进计数。对于步数计数,我都会查询当天的步骤,并在实时发生步骤时立即请求步数。

目前,在我执行此操作之前,请先检查 [CMStepCounter isStepCountingAvailable] 以及本地覆盖标记,然后再继续此代码。我假设如果未授予motionActivity的授权,则isStepCountingAvailable将返回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
    }
}];

1 个答案:

答案 0 :(得分:1)

您正在通过检查错误来正确执行此操作。根据文档(https://developer.apple.com/library/ios/documentation/coremotion/reference/cmmotionmanager_class/index.html#//apple_ref/c/tdef/CMError),您将收到错误代码为105的CMErrors,就像您所见。

不幸的是,没有办法提前检查您是否获得授权,但这遵循Apple与其他需要授权的Core级别框架(如CoreLocation)的范例。原因是你可以在后台进行动作步骤,然后用户可以禁用你的动作访问,你必须对这个事件作出反应,这可能与你不做出反应的方式相同。首先授权。