美文网首页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