iOS : l'activité de mouvement est-elle activée dans Paramètres > Confidentialité > Activité de mouvement
-
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.
}
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;
}
}