2015-02-12 39 views
1

我正在使用运动活动管理器(更详细 - 计步器)的iOS应用程序中工作。当应用程序启动时,我需要检查运动活动是否被用户允许。我做iPhone - 请求运动活动

_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); 
              }); 
    }]; 
    

这不挂检查应用程序的另一种方式,但“警报窗口”被从未显示

  • 我执行了这个“检查snipp et“在以后的代码 - 但再次 - 应用程序挂起

回答

0

本质上,使用可以首先确保警报视图不会阻止您的应用程序,当第一个视图出现,即。在onViewDidAppear。

例如做:

-(void) viewDidAppear:(BOOL)animated { 
    if ([MyActivityManager checkAvailability]) { // motion and activity availability checks 
     [myDataManager checkAuthorization:^(BOOL authorized) { // is authorized 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if (authorized) { 
        // do your UI update etc... 
       } 
       else { 
        // maybe tell the user that this App requires motion and tell him about activating it in settings... 
       } 
      }); 
     }]; 
    } 
} 

这是我自己做的。我也基于Apple示例代码基于我的应用程序,并注意到,该示例还存在您所描述的问题。

+0

没有诀窍 - 所以底线 - **使支持视图加载之前检查被称为** – ajitam 2015-02-12 10:49:30