Ответ 1
Новое в iOS 11, CMSSensorRecorder имеет статический метод authorizationStatus для его получения.
+ (CMAuthorizationStatus)authorizationStatus;
Если для приложения требуется доступ к данным Motion Activity
, он запрашивает пользователя при установке. Однако, если пользователь случайно ответил "Нет", приложение не будет работать.
Я ищу способ проверить, включена ли функция движения, чтобы я мог предложить пользователю включить, если нет.
Может ли кто-нибудь указать мне код в правильном направлении, пожалуйста?
Следуя информации от Doc (спасибо), кажется, что Apple не предоставляет прямой метод проверки статуса Motion Activity
в режиме конфиденциальности. Я смог узнать, подобрав ошибку: -
[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.
}
Новое в iOS 11, CMSSensorRecorder имеет статический метод authorizationStatus для его получения.
+ (CMAuthorizationStatus)authorizationStatus;
Apple имеет образец проекта, который показывает, как проверять и запрашивать доступ для всех различных разрешений (включая Motion Activity) здесь. Я предлагаю вам быстро взглянуть на это - это довольно просто.
Новое в iOS 9, CMSensorRecorder
(doc link) имеет метод класса, чтобы проверить, разрешено ли ваше приложение для Motion and Fitness:
class func isAuthorizedForRecording() -> Bool
+ (BOOL)isAuthorizedForRecording
Как насчет этого?
- (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;
}
}