我想创建一个可以接收和处理动作更新的应用程序,以了解用户是静止,行走,跑步还是在交通工具上。 我在参考文献中看到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
,我错在哪里?我该如何解决这个问题?
由于
答案 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
}