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

StackOverflow https://stackoverflow.com//questions/21005990

  •  20-12-2019
  •  | 
  •  

Вопрос

Если приложению требуется доступ к 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.
}
Это было полезно?

Решение

Новое в iOS 11, CMSSENSENSORRECORDER имеет статический метод под названием Авторизацияstatus для его получения.

+ (CMAuthorizationStatus)authorizationStatus;

Другие советы

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

Новое в iOS 9, CMSensorRecorder(ссылка на документ) имеет метод класса для проверки того, авторизовано ли ваше приложение для Motion & Fitness:

  • Свитфт 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