iOS: ¿Actividad de movimiento está habilitada en Configuración > Privacidad > Actividad de movimiento?
-
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.
}
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;
}
}