美文网首页iOS
iOS通过CoreMotion获取活动状态

iOS通过CoreMotion获取活动状态

作者: 喔牛慢慢爬 | 来源:发表于2022-05-12 17:03 被阅读0次

我们在开发跑步相关APP时需要知道用户当前的运动状态,是静止、步行、跑步、骑车,如何获取这些状态呢?在CoreMotion框架中可以获取到这些信息。

  • API解析
  1. 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
  1. 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:************************************")
            }
        }

参考

相关文章

网友评论

    本文标题:iOS通过CoreMotion获取活动状态

    本文链接:https://www.haomeiwen.com/subject/hjasurtx.html