Подтвердить что ты не робот

IOS - действие движения включено в настройках> Конфиденциальность> Движение

Если для приложения требуется доступ к данным 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.
}
4b9b3361

Ответ 1

Новое в iOS 11, CMSSensorRecorder имеет статический метод authorizationStatus для его получения.

+ (CMAuthorizationStatus)authorizationStatus;

Ответ 2

Apple имеет образец проекта, который показывает, как проверять и запрашивать доступ для всех различных разрешений (включая Motion Activity) здесь. Я предлагаю вам быстро взглянуть на это - это довольно просто.

Ответ 3

Новое в iOS 9, CMSensorRecorder (doc link) имеет метод класса, чтобы проверить, разрешено ли ваше приложение для Motion and Fitness:

  • Переключить class func isAuthorizedForRecording() -> Bool
  • Objective-c + (BOOL)isAuthorizedForRecording

Ответ 4

Как насчет этого?

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