【发布时间】:2015-02-12 07:24:01
【问题描述】:
我正在开发一个使用 Motion Activity Manager 的 iOS 应用程序(更详细地说 - 计步器)。当应用程序启动时,我需要检查用户是否允许 Motion Activity。我通过这样做来做到这一点
_motionActivityManager = [[CMMotionActivityManager alloc] init];
_pedometer = [[CMPedometer alloc] init];
[_pedometer queryPedometerDataFromDate : [NSDate date]
toDate : [NSDate date]
withHandler : ^(CMPedometerData *pedometerData, NSError *error) {
// BP1
if (error != nil) {
// BP2
}
else {
// BP3
}
}];
正如这里所讨论的 ☛ iOS - is Motion Activity Enabled in Settings > Privacy > Motion Activity
据我了解,此代码将触发“警报窗口”,要求用户选择加入/退出。
在我的情况下发生的情况是,当我运行应用程序第一次(又名。所有警告都被重置)时,应用程序在“BP1”之前挂起(回调永远不会执行),然后如果我停止应用程序使用 xCode 或按主页按钮出现“警报窗口”。如果我选择加入,一切都很好,在第二次运行时会达到“BP3”(如果我选择退出,则达到“BP2”)。
我尝试做的事情:
-
我使用异步执行实现了另一种检查方式
[_pedometer queryPedometerDataFromDate : [NSDate date] toDate : [NSDate date] withHandler : ^(CMPedometerData *pedometerData, NSError *error) { // Because CMPedometer dispatches to an arbitrary queue, it's very important // to dispatch any handler block that modifies the UI back to the main queue. dispatch_async(dispatch_get_main_queue(), ^{ authorizationCheckCompletedHandler(!error || error.code != CMErrorMotionActivityNotAuthorized); }); }];
这不会挂起应用程序,但永远不会显示“警报窗口”
- 我稍后在代码中执行了这个“检查 sn-p” - 但又一次 - 应用程序挂起
【问题讨论】: