题
如果应用程序需要访问 Motion Activity
它在安装时询问用户的数据。但是,如果用户不小心回答"否",那么应用程序将无法工作。
我正在寻找一种方法来检查运动活动是否已启用,以便如果没有,我可以提示用户启用。
有人能给我指出正确的方向吗?
根据Doc(谢谢)的信息,苹果似乎没有提供直接的方法来检查 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.
}
解决方案
在iOS11中新增,CMSSensorRecorder有一个名为 授权状态 把它找回来。
+ (CMAuthorizationStatus)authorizationStatus;
其他提示
IOS9中的新功能, CMSensorRecorder
(文档链接)有一个类方法来检查你的应用程序是否被授权用于运动和健身:
- 转换,转换
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;
}
}
不隶属于 StackOverflow