如何使用CMMotionActivityManager并接收更新?

时间:2014-01-21 10:32:14

标签: ios iphone core-motion apple-m7

我想创建一个可以接收和处理动作更新的应用程序,以了解用户是静止,行走,跑步还是在交通工具上。 我在参考文献中看到CMMotionActivityManager对我有用。

  

CMMotionActivityManager类提供对设备存储的运动数据的访问。运动数据反映用户是在行走,跑步,在车辆中还是静止一段时间。

我是应用程序开发的新手,我不明白如何使用该方法开始更新。 执行此操作的方法是- (void)startActivityUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMMotionActivityHandler)handler。 我不明白我应该在处理程序上写什么,因为引用说:

  

处理程序   当检测到当前运动类型的变化时执行的块。有关此块参数的信息,请参阅CMMotionActivityHandler。此属性不得为零。

我的实施是:

- (IBAction)startButtonPressed:(id)sender {
_motionActivityManager = [[CMMotionActivityManager alloc] init];
[_motionActivityManager startActivityUpdatesToQueue:NSOperationQueueDefaultMaxConcurrentOperationCount withHandler:CMMotionActivityHandler];
}

我已经导入了CoreMotion框架 但XCode无法识别CMMotionActivityHandler,我错在哪里?我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:4)

示例代码:

[_motionActivityManager startActivityUpdatesToQueue:[[NSOperationQueue alloc] init]
                                          withHandler:
     ^(CMMotionActivity *activity) {

         dispatch_async(dispatch_get_main_queue(), ^{

             if ([activity walking]) {
                 NSLog(@"walking");
             }
     });
}];

答案 1 :(得分:1)

//检查设备上是否可用

BOOL b=  [CMMotionActivityManager isActivityAvailable];;

motionActivityManager=[[CMMotionActivityManager alloc]init];
//register for coremotion notification

 [motionActivityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMMotionActivity *activity) {

    NSLog(@"Got a core motion update");
    NSLog(@"Current activity date is %f",activity.timestamp);
    NSLog(@"Current activity confidence from a scale of 0 to 2 - 2 being best- is: %ld",activity.confidence);
    NSLog(@"Current activity type is unknown: %i",activity.unknown);
    NSLog(@"Current activity type is stationary: %i",activity.stationary);
    NSLog(@"Current activity type is walking: %i",activity.walking);
    NSLog(@"Current activity type is running: %i",activity.running);
    NSLog(@"Current activity type is cycling: %i",activity.cycling);
    NSLog(@"Current activity type is automotive: %i",activity.automotive);



}];

请检查设备

答案 2 :(得分:1)

Swift 2.0

_motionActivityManager = CMMotionActivityManager()   
_motionActivityManager.startActivityUpdatesToQueue(NSOperationQueue.mainQueue())
{
    // CMMotionActivity
    activity in

    // do your logic here

}