iOS - 在设置中启用动作活动>隐私>动作活动

时间:2014-01-08 20:37:08

标签: ios core-motion

如果应用需要访问Motion Activity数据,则会在安装时询问用户。但是,如果用户意外回答“否”,那么该应用将无效。

我正在寻找一种检查运动活动是否已启用的方法,以便我可以提示用户启用,如果没有。

有人可以指出我正确的方向吗?


根据Doc(谢谢)提供的信息,似乎Apple没有提供直接方法来检查隐私中Motion Activity的状态。我能够通过了解错误找到答案: -

[stepCounter queryStepCountStartingFrom:[NSDate date]
                                     to:[NSDate date]
                                toQueue:[NSOperationQueue mainQueue]
                            withHandler:^(NSInteger numberOfSteps, NSError *error) {
                                if (error != nil && error.code == CMErrorMotionActivityNotAuthorized) {
                                    // The app isn't authorized to use motion activity support.
}

5 个答案:

答案 0 :(得分:14)

Apple有一个sample project,其中显示了如何检查和请求所有各种权限(包括动作活动)here的访问权限。我建议你快速看一下 - 这很简单。

答案 1 :(得分:4)

iOS 9中的新功能,CMSensorRecorderdoc link)有一种类方法,用于检查您的应用是否已获得Motion&健身:

  • Switft class func isAuthorizedForRecording() -> Bool
  • Objective-c + (BOOL)isAuthorizedForRecording

答案 2 :(得分:2)

iOS 11中的新功能,CMSSensorRecorder有一个名为authorizationStatus的静态方法来检索它。

+ (CMAuthorizationStatus)authorizationStatus;

答案 3 :(得分:1)

怎么样?

- (void)checkMotionAuth {
    switch ([CMMotionActivityManager authorizationStatus])
    {
        case CMAuthorizationStatusNotDetermined:
        {
            CMMotionActivityManager *manager = [[CMMotionActivityManager alloc]init];
            [manager queryActivityStartingFromDate:[NSDate date]
                                            toDate:[NSDate date]
                                           toQueue:[NSOperationQueue mainQueue]
                                       withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {

                                           if ([CMMotionActivityManager authorizationStatus] == CMAuthorizationStatusAuthorized)
                                           {
                                               NSLog(@"Authorized");
                                           }
                                           else
                                           {
                                               NSLog(@"Denied");
                                           }
                                       }];
        }
            break;
        case CMAuthorizationStatusRestricted:
        case CMAuthorizationStatusDenied:
        {
            NSLog(@"Denied/Restricted");
        }
            break;
        case CMAuthorizationStatusAuthorized:
        {
            NSLog(@"Authorized");
        }
        default:
            break;
    }
 }

答案 4 :(得分:0)

如果您专门查找计步器(步数)数据,则应使用 CMPedometer authorizationStatus() 函数,该函数从 iOS 11 开始可用。

let authorizationStatus = CMPedometer.authorizationStatus()

它将返回 4 个 CMAuthorizationStatus 值之一:

  • notDetermined:用户既未授予也未拒绝访问。
  • restricted:由于系统范围的限制(例如在隐私设置中),访问被拒绝。
  • 拒绝:用户拒绝访问您的应用程序。
  • 已授权:您有权访问运动和健身数据。