iOS : l'activité de mouvement est-elle activée dans Paramètres > Confidentialité > Activité de mouvement

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

  •  20-12-2019
  •  | 
  •  

Question

Si une application nécessite l'accès à Motion Activity données qu'il demande à l'utilisateur lors de l'installation.Cependant, si l'utilisateur répond accidentellement « Non », l'application ne fonctionnera pas.

Je cherche un moyen de vérifier si l'activité de mouvement est activée, afin de pouvoir inviter l'utilisateur à l'activer sinon.

Quelqu'un peut-il m'indiquer la bonne direction en termes de code, s'il vous plaît ?


Suite aux informations de Doc (Merci), il semble qu'Apple ne propose pas de méthode directe pour vérifier l'état de Motion Activity dans Confidentialité.J'ai pu le découvrir en détectant l'erreur : -

[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.
}
Était-ce utile?

La solution

Nouveau dans iOS 11, CMSSensorRecorder dispose d'une méthode statique appelée Statut d'autorisation pour le récupérer.

+ (CMAuthorizationStatus)authorizationStatus;

Autres conseils

Apple a un exemple de projet qui montre comment vérifier et demander l'accès à toutes les différentes autorisations (y compris Motion Activity) ici.Je vous suggère d'y jeter un coup d'œil rapide - c'est assez simple.

Nouveau dans iOS 9, CMSensorRecorder(lien vers la documentation) dispose d'une méthode de classe pour vérifier si votre application est autorisée pour Motion & Fitness :

  • Swift class func isAuthorizedForRecording() -> Bool
  • Objectif c + (BOOL)isAuthorizedForRecording

Que dis-tu de ça?

- (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;
    }
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top