iOS - ist Bewegungsaktivität unter Einstellungen> Datenschutz> Bewegungsaktivität aktiviert

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

  •  20-12-2019
  •  | 
  •  

Frage

Wenn eine App Zugriff auf benötigt Motion Activity daten, die der Benutzer bei der Installation abfragt.Wenn der Benutzer jedoch versehentlich mit Nein antwortet, funktioniert die App nicht.

Ich suche nach einer Möglichkeit zu überprüfen, ob die Bewegungsaktivität aktiviert ist, damit ich den Benutzer auffordern kann, sie zu aktivieren, wenn nicht.

Kann mir bitte jemand codeweise in die richtige Richtung weisen?


Nach den Informationen von Doc (Danke) scheint Apple keine direkte Methode zur Überprüfung des Status von bereitzustellen Motion Activity in Privatsphäre.Ich konnte es herausfinden, indem ich den Fehler aufnahm:-

[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.
}
War es hilfreich?

Lösung

Neu in iOS 11 hat CMSSensorRecorder eine statische Methode namens berechtigungsStatus um es abzurufen.

+ (CMAuthorizationStatus)authorizationStatus;

Andere Tipps

Apple hat eine Beispielprojekt dies zeigt, wie Sie den Zugriff auf alle verschiedenen Berechtigungen (einschließlich Bewegungsaktivität) überprüfen und anfordern hier.Ich schlage vor, Sie werfen einen kurzen Blick darauf - es ist ziemlich einfach.

Neu in iOS 9, CMSensorRecorder(dokument link) hat eine Klassenmethode, um zu überprüfen, ob Ihre App für Bewegung und Fitness autorisiert ist:

  • Schalter class func isAuthorizedForRecording() -> Bool
  • Objective-c + (BOOL)isAuthorizedForRecording

Wie wäre es damit?

- (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;
    }
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top