如果应用程序需要访问 Motion Activity 它在安装时询问用户的数据。但是,如果用户不小心回答"否",那么应用程序将无法工作。

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

有人能给我指出正确的方向吗?


根据Doc(谢谢)的信息,苹果似乎没有提供直接的方法来检查 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.
}
有帮助吗?

解决方案

在iOS11中新增,CMSSensorRecorder有一个名为 授权状态 把它找回来。

+ (CMAuthorizationStatus)authorizationStatus;

其他提示

苹果有一个 项目样本 这显示了如何检查和请求访问所有不同的权限(包括运动活动) 这里.我建议你快速浏览一下-这很简单。

IOS9中的新功能, CMSensorRecorder(文档链接)有一个类方法来检查你的应用程序是否被授权用于运动和健身:

  • 转换,转换 class func isAuthorizedForRecording() -> Bool
  • 目标-c + (BOOL)isAuthorizedForRecording

这个怎么样?

- (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;
    }
 }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top