【问题标题】:m7/m8 detect if motion activity authorization was deniedm7/m8 检测运动活动授权是否被拒绝
【发布时间】:2015-01-07 02:55:21
【问题描述】:

我以多种方式使用 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
    }
}];

【问题讨论】:

    标签: ios authorization apple-m7


    【解决方案1】:

    通过检查错误,您做对了。根据文档 (https://developer.apple.com/library/ios/documentation/coremotion/reference/cmmotionmanager_class/index.html#//apple_ref/c/tdef/CMError),您将收到带有错误代码 105 的 CMErrors,就像您看到的那样。

    遗憾的是,无法提前检查您是否已获得授权,但这遵循 Apple 的范例以及其他需要授权的核心级框架,例如 CoreLocation。原因是您可以在后台获取动作步骤,然后用户可以禁用您的动作访问,您必须以与您对不存在的反应相同的方式对该事件做出反应首先授权。

    【讨论】:

    • 这里最后一部分的小注释:当用户在设置中禁用对 MotionActivity 的授权(可能还有位置)时,IOS 会杀死应用程序的当前实例,并在您下次访问它时重新启动。
    • [CLLocationManager locationServicesEnabled] for CoreLocation 检查只是这样,我发现苹果不会在 CoreMotion 中为此提供一个简单的方法非常烦人,就像 Miro 说的那样,iOS 无论如何都会杀死应用程序,所以“在执行过程中”参数失败..
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2022-11-27
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多