iOS - is Motion Activity Enabled in Settings > Privacy > Motion Activity

谁说胖子不能爱 提交于 2019-11-27 04:07:12

问题


If an app requires access to Motion Activity data it asks the user at install. However if the user accidentally answers 'No', then the app will not work.

I am looking for a way to check if the Motion Activity is enabled, so that I can prompt the user to enable if not.

Can someone point me in the right direction code wise please?


Following the info from Doc (Thank you), it seems that Apple do not provide a direct method to check the status of Motion Activity in Privacy. I was able to find out by picking up on the error:-

[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.
}

回答1:


New in iOS 11, CMSSensorRecorder has a static method called authorizationStatus to retrieve it.

+ (CMAuthorizationStatus)authorizationStatus;




回答2:


Apple has a sample project that shows how to check and request access for all the various permissions (including Motion Activity) here. I suggest you take a quick look at that - it's pretty straightforward.




回答3:


New in iOS 9, CMSensorRecorder(doc link) has a class method to check if your app is authorized for Motion & Fitness:

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



回答4:


How about this?

- (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;
    }
 }


来源:https://stackoverflow.com/questions/21005990/ios-is-motion-activity-enabled-in-settings-privacy-motion-activity

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!