iOS - включена ли активность движения в настройках > Конфиденциальность > Активность движения
-
20-12-2019 - |
Вопрос
Если приложению требуется доступ к 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, CMSSENSENSORRECORDER имеет статический метод под названием Авторизацияstatus для его получения.
+ (CMAuthorizationStatus)authorizationStatus;
Другие советы
Apple имеет a Пример проекта, которые показывают, как проверить и запросить доступ к доступу для всех различных разрешений (включая деятельность движения) здесь .Я предлагаю вам быстро посмотреть на это - это довольно просто.
Новое в iOS 9, CMSensorRecorder
(ссылка на документ) имеет метод класса для проверки того, авторизовано ли ваше приложение для Motion & Fitness:
- Свитфт
class func isAuthorizedForRecording() -> Bool
- Цель-c
+ (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;
}
}
.