iOS: ¿Actividad de movimiento está habilitada en Configuración > Privacidad > Actividad de movimiento?

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

  •  20-12-2019
  •  | 
  •  

Pregunta

Si una aplicación requiere acceso a Motion Activity datos que le pide al usuario durante la instalación.Sin embargo, si el usuario responde accidentalmente "No", la aplicación no funcionará.

Estoy buscando una manera de verificar si la actividad de movimiento está habilitada, para poder pedirle al usuario que la habilite en caso contrario.

¿Alguien puede indicarme el código de dirección correcto, por favor?


Siguiendo la información del Doc (Gracias), parece que Apple no proporciona un método directo para verificar el estado de Motion Activity en Privacidad.Pude averiguarlo detectando el error: -

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

Solución

Nuevo en iOS 11, cmssensorecorder tiene un método estático llamado AutorizaciónStatus para recuperarlo.

+ (CMAuthorizationStatus)authorizationStatus;

Otros consejos

Apple tiene una Proyecto de muestra que muestra cómo verificar y solicitar el acceso para todos los diversos permisos (incluida la actividad de movimiento) aquí .Le sugiero que eche un vistazo rápido a eso, es bastante sencillo.

Nuevo en iOS 9, CMSensorRecorder ( Doc Link ) tiene un método de clase para verificar si su aplicación está autorizada para Motion & Fitness:

  • switft class func isAuthorizedForRecording() -> Bool
  • objective-c + (BOOL)isAuthorizedForRecording

¿Qué hay de esto?

- (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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top