我们在开发跑步相关APP时需要知道用户当前的运动状态,是静止、步行、跑步、骑车,如何获取这些状态呢?在CoreMotion框架中可以获取到这些信息。
- API解析
- CMMotionActivity
@interface CMMotionActivityManager : NSObject
//活动数据是否可用
+ (BOOL)isActivityAvailable;
//进行用户权限的申请
+ (CMAuthorizationStatus)authorizationStatus;
//请求某一段时间内的用户活动信息
- (void)queryActivityStartingFromDate:(NSDate *)start
toDate:(NSDate *)end
toQueue:(NSOperationQueue *)queue
withHandler:(CMMotionActivityQueryHandler)handler;
//开始进行用户活动信息的更新
- (void)startActivityUpdatesToQueue:(NSOperationQueue *)queue
withHandler:(CMMotionActivityHandler)handler;
//停止用户活动信息的更新
- (void)stopActivityUpdates;
@end
- CMMotionActivity
@interface CMMotionActivity : CMLogItem
//数据的可信度
typedef NS_ENUM(NSInteger, CMMotionActivityConfidence) {
CMMotionActivityConfidenceLow = 0, //可信度低
CMMotionActivityConfidenceMedium, //可信度中
CMMotionActivityConfidenceHigh //可信度高
};
@property(readonly, nonatomic) CMMotionActivityConfidence confidence;
//记录开始时间
@property(readonly, nonatomic) NSDate *startDate;
//是否是位置状态 如果是 可能关机状态
@property(readonly, nonatomic) BOOL unknown;
//设备是否没有移动
@property(readonly, nonatomic) BOOL stationary;
//设备持有者是否在步行
@property(readonly, nonatomic) BOOL walking;
//设备持有者是否在跑步
@property(readonly, nonatomic) BOOL running;
//设备持有者是否在乘车
@property(readonly, nonatomic) BOOL automotive;
//设备持有者是否在骑自行车
@property(readonly, nonatomic) BOOL cycling;
@end
- 使用代码(swift)
//定义并初始化活动管理类
var motionActivity:CMMotionActivityManager = CMMotionActivityManager()
if CMMotionActivityManager.isActivityAvailable() {
//开始实时更新活动状态
motionActivity.startActivityUpdates(to: OperationQueue.main) { activity in
if activity?.confidence == .low {
print("MotionActivity:准确度 低")
} else if activity?.confidence == .medium {
print("MotionActivity:准确度 中")
} else if activity?.confidence == .high {
print("MotionActivity:准确度 高")
}
if activity!.unknown {
print("MotionActivity:状态 未知状态")
}
if activity!.stationary {
print("MotionActivity:状态 静止状态")
}
if activity!.walking {
print("MotionActivity:状态 步行状态")
}
if activity!.running {
print("MotionActivity:状态 跑步状态")
}
if activity!.automotive {
print("MotionActivity:状态 乘车状态")
}
if activity!.cycling {
print("MotionActivity:状态 骑自行车状态")
}
print("MotionActivity:************************************")
}
}
网友评论