iOS - a atividade de movimento está ativada em Configurações > Privacidade > Atividade de movimento

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

  •  20-12-2019
  •  | 
  •  

Pergunta

Se um aplicativo exigir acesso a Motion Activity dados que ele pede ao usuário na instalação.No entanto, se o usuário responder acidentalmente 'Não', o aplicativo não funcionará.

Estou procurando uma maneira de verificar se a atividade de movimento está habilitada, para que eu possa solicitar ao usuário que ative, caso contrário.

Alguém pode me indicar a direção certa em termos de código, por favor?


Seguindo as informações do Doc (Obrigado), parece que a Apple não fornece um método direto para verificar o status do Motion Activity em Privacidade.Consegui descobrir detectando o erro: -

[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.
}
Foi útil?

Solução

Novidade no iOS 11, CMSSensorRecorder possui um método estático chamado autorizaçãoStatus para recuperá-lo.

+ (CMAuthorizationStatus)authorizationStatus;

Outras dicas

A Apple tem um projeto de amostra que mostra como verificar e solicitar acesso para todas as diversas permissões (incluindo atividade de movimento) aqui.Sugiro que você dê uma olhada rápida nisso - é bastante simples.

Novidade no iOS 9, CMSensorRecorder(link do documento) tem um método de classe para verificar se seu aplicativo está autorizado para Motion & Fitness:

  • Rápido class func isAuthorizedForRecording() -> Bool
  • Objetivo-c + (BOOL)isAuthorizedForRecording

Que tal agora?

- (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;
    }
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top