iOS - a atividade de movimento está ativada em Configurações > Privacidade > Atividade de movimento
-
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.
}
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;
}
}