CoreMotion运动与健身之监听用户运动状态

简介:

#import <CoreMotion/CoreMotion.h>


// 运动与健身

- (void)motion

{

    if ([CMMotionActivityManager isActivityAvailable])

    {

        CMMotionActivityManager *motionActivityManager = [[CMMotionActivityManager alloc]init];

        

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

            

            NSLog(@"confidence=%@  unknown=%@   walking=%@  stationary=%@  running=%@   cycling=%@  automotive=%@  startDate==%@", @(activity.confidence), @(activity.unknown), @(activity.walking), @(activity.stationary), @(activity.running), @(activity.cycling), @(activity.automotive), activity.startDate);

        }];

        

        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

        NSDateComponents *dateCom = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];

        

        NSDate *endDate = [calendar dateFromComponents:dateCom];

        

        [dateCom setHour:0];

        [dateCom setMinute:0];

        [dateCom setSecond:0];

        

        NSDate *startDate = [calendar dateFromComponents:dateCom];

        [motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:[NSOperationQueue mainQueue] withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {

            for (CMMotionActivity *activity in activities)

            {

                NSLog(@"query confidence=%@  unknown=%@   walking=%@  stationary=%@  running=%@   cycling=%@  automotive=%@  startDate==%@", @(activity.confidence), @(activity.unknown), @(activity.walking), @(activity.stationary), @(activity.running), @(activity.cycling), @(activity.automotive), activity.startDate);

            }

        }];

         

        [motionActivityManager stopActivityUpdates];

        

    } else

    {

        NSLog(@"运动与健身 不可用");

    }

}


目录
相关文章
|
17天前
|
编解码 人工智能 自然语言处理
牛B, 我去,新手小白也能使用InfiniteTalk搭建属于自己的数字人啦 ,真的太简单啦!!!
小华同学带你解锁AI高效工具!InfiniteTalk创新“稀疏帧配音”技术,实现口型、表情、身态协同演进,支持I2V/V2V双模式,确保长视频ID/背景稳定,流畅跨片段衔接,助力课程、宣传、电商等多场景降本增效。
304 6
万年历[取当日信息]免费API接口教程
此API提供万年历当天的详细信息,包括农历、星期、宜忌、生肖、星座、节日、五行、星宿等。支持POST和GET请求,需提供用户ID和KEY。返回数据包含阳历、农历、干支、节日列表等多项内容。示例URL:https://cn.apihz.cn/api/time/getday.php?id=88888888&key=88888888。
3658 10
|
JavaScript 前端开发 开发者
Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)
这篇文章详细介绍了Vuex的基本概念、使用场景、安装配置、基本用法、实际应用案例以及注意事项,通过一个数字累加器的实战示例,帮助开发者深入理解Vuex的原理和应用。
|
运维 Cloud Native Devops
产品交付双轮驱动下的研发工具思考与实践
产品交付的双轮驱动思维模型强调以&quot;业务价值&quot;和&quot;产品交付&quot;为核心,前者把握方向,后者提供动力。该模型通过理解需求、确定真北、团队探讨和方案精炼(价值轮)来确保业务价值,然后借助开发、测试、运维和反馈(交付轮)实现快速产品交付。根据不同的业务定位,如战略级、运营级或管理级,选择合适的研发效能工具,如PingCode、GitLab、简单云、阿里云云效和思码逸,以支持不同层次的需求。思码逸尤其以其研发效能度量和数据分析能力突出。
356 2
|
网络协议 Linux 应用服务中间件
数据包的奇妙旅程:揭秘网络传输的7个关键步骤
在发送数据包的过程中,不同层次的网络协议扮演着不同的角色。数据包在经过多层封装后,通过网络设备和路由器进行转发,并最终到达目标设备。在每个层次中,都会进行相应的处理和解封装,以确保数据包能够正确传输和被接收端处理。整个过程涉及到了物理层、数据链路层、网络层、传输层和应用层等多个层次的协议和设备。尽管在简化的示例中,发送数据包的过程相对简单,但实际情况中会更加复杂,需要通过路由表选择最佳路径来保证数据包的快速、高效传输。整个过程展示了网络分层结构的重要性和协同工作的复杂性。
654 0
数据包的奇妙旅程:揭秘网络传输的7个关键步骤
|
存储 缓存 监控
Netty基础篇:详解Netty底层NIO
Netty基础篇:详解Netty底层NIO
|
运维 API 数据安全/隐私保护
今天出门你查老黄历了吗?包括万年历在内的超多免费可用 API 推荐(一)
万年历 API:获取公历日期对应的农历、农历节日节气、天干地支纪年纪月纪日、生肖属相、宜忌、星座等信息。支持查询未来15天。
1942 0
今天出门你查老黄历了吗?包括万年历在内的超多免费可用 API  推荐(一)
|
Web App开发 弹性计算 运维
通过OOS实现自动定时开关机
本场景介绍如何快速通过OOS运维编排服务实现定时开关机。
|
iOS开发
iOS 统计Xcode项目代码行数
iOS 统计Xcode项目代码行数
439 0
|
Ubuntu Java 程序员
Ubuntu环境下载OpenJDK11源码
Ubuntu环境下载OpenJDK11源码,为之后的修改和编译做准备
720 0
Ubuntu环境下载OpenJDK11源码