如果应用需要访问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.
}
答案 0 :(得分:14)
Apple有一个sample project,其中显示了如何检查和请求所有各种权限(包括动作活动)here的访问权限。我建议你快速看一下 - 这很简单。
答案 1 :(得分:4)
iOS 9中的新功能,CMSensorRecorder
(doc link)有一种类方法,用于检查您的应用是否已获得Motion&健身:
class func isAuthorizedForRecording() -> Bool
+ (BOOL)isAuthorizedForRecording
答案 2 :(得分:2)
iOS 11中的新功能,CMSSensorRecorder有一个名为authorizationStatus的静态方法来检索它。
+ (CMAuthorizationStatus)authorizationStatus;
答案 3 :(得分:1)
怎么样?
- (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;
}
}
答案 4 :(得分:0)
如果您专门查找计步器(步数)数据,则应使用 CMPedometer authorizationStatus() 函数,该函数从 iOS 11 开始可用。
let authorizationStatus = CMPedometer.authorizationStatus()
它将返回 4 个 CMAuthorizationStatus 值之一: