加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

iOS 计步器的几种实现方式

发布时间:2023-03-31 14:15:42 所属栏目:教程 来源:
导读:使用 CMpedometer 类来获取步数和距离
使用时需要导入,此类在iOS8之后才可用,在iOS8之前,使用CMStepCounter类(在iOS8之后被CMpedometer替代)来获取步数,使用方法如CMpedometer类相似。

CMpedometer
// 设备
使用 CMpedometer 类来获取步数和距离
使用时需要导入,此类在iOS8之后才可用,在iOS8之前,使用CMStepCounter类(在iOS8之后被CMpedometer替代)来获取步数,使用方法如CMpedometer类相似。

CMpedometer
// 设备是否支持计步功能
+ (BOOL)isstepCountingAvailable;
// 除了计步,设备是否支持距离估计
+ (BOOL)isdistanceAvailable;
// 除了计步,设备是否支持台阶计数
+ (BOOL)isFloorCountingAvailable;    
// 除了计步,设备是否支持速度估计
+ (BOOL)isPaceAvailable NS_AVAILABLE(NA,9_0);
// 除了计步,设备是否支持节奏估计
+(BOOL)isCadenceAvailable NS_AVAILABLE(NA,9_0);
// 设备是否支持计步器事件
+ (BOOL)ispedometerEventTrackingAvailable NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);    
// 在给定时间范围内查询用户的行走活动,数据最多可以使用7天内有效,返回的数据是从系统范围的历史记录中计算出来的,该历史记录是在后台连续收集的。结果返回在串行队列中。
- (void)querypedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMpedometerHandler)handler;
// 在串行队列上启动一系列连续计步器更新到处理程序。 对于每次更新,应用程序将从指定的开始日期和与最新确定相关联的时间戳开始收到累积的行人活动。 如果应用程序在后台进行背景调整,则应用程序将在下次更新中收到在后台期间累积的所有行人活动。
- (void)startpedometerUpdatesFromDate:(NSDate *)start withHandler:(CMpedometerHandler)handler;
// 停止计步器更新
-(void)stoppedometerUpdates;
// 在串行队列上启动计步器事件更新。 事件仅在应用程序在前台/后台运行时可用。
-(void)startpedometerEventUpdatesWithHandler:(CMpedometerEventHandler)handler NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);
// 停止计步器事件更新
-(void)stoppedometerEventUpdates NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);
CMpedometerData
// 计步器数据有效期间的开始时间。这是会话或历史查询请求的开始时间。
@property(readonly, nonatomic) NSDate *startDate;
// 计步器数据有效期间的结束时间。对于更新,这是最新更新的时间。 对于历史查询,这是请求的结束时间。
@property(readonly, nonatomic) NSDate *endDate;
// 用户的步数
@property(readonly, nonatomic) NSNumber *numberOfSteps;
// 用户行走和跑步时估计的一米为单位的距离。若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *distance; 
// 上楼的大概楼层数,若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *floorsAscended;
// 下楼的大概楼层数, 若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *floorsDescended;
// 对于更新,这将以s / m(每米秒)返回当前速度。 如果满足以下条件,则值为零:1. 资料尚未公布 2. 历史查询 3.平台不支持
@property(readonly, nonatomic, nullable) NSNumber *currentPace NS_AVAILABLE(NA,9_0);
// 对于更新,这将返回以秒为单位执行行走的节奏。 如果满足以下条件,则值为零:1. 资料尚未公布 2. 历史查询 3.平台不支持
@property(readonly, nonatomic, nullable) NSNumber *currentCadence NS_AVAILABLE(NA,9_0);
// 对于更新,这将返回自startpedometerUpdatesFromDate:withHandler :,以s / m(每米秒))的平均活动速度。 对于历史查询,这将返回startDate和endDate之间的平均活动速度。 平均主动速度省略了非活动时间,平均步调从用户移动。 如果满足以下条件,则值为零:1. 对于历史信息查询,信息无效。例如用户在开始时间和结束时间内没有移动 2. 平台不支持
@property(readonly, nonatomic, nullable) NSNumber *averageActivePace NS_AVAILABLE(NA,10_0);
CMpedometerEvent
// 事件发生的时间
@property(readonly, nonatomic) NSDate *date;
// 描述行走活动过渡的事件类型
@property(readonly, nonatomic) CMpedometerEventType type;
// 当计步器数据可用时要调用的block的类型
typedef void (^CMpedometerHandler)(CMpedometerData * __nullable pedometerData, NSError * __nullable error) __TVOS_PROHIBITED;
// 当计步器事件可用时将被调用的block的类型。
typedef void (^CMpedometerEventHandler)(CMpedometerEvent * __nullable pedometerEvent, NSError * __nullable error) NS_AVAILABLE(NA, 10_0) __WATCHOS_AVAILABLE(3_0) __TVOS_PROHIBITED;
获取步数和距离的方法
使用库需要在 info.plist 文件中增加 NSMotionUsageDescription 键。
可以使用 isstepCountingAvailable 或者 isdistanceAvailable 来检查设备是否支持计步功能或距离功能。

创建 CMpedometer 实例对象

 /// 创建计步器对象
 if ([CMpedometer isstepCountingAvailable]) { // 8.0 之后可使用
     self.pedometer = [[CMpedometer alloc] init];
 }
调用

// 方法获取从某个时间点到现在的步数,距离,楼层等信息。此方法会实时更新数据。
- (void)startpedometerUpdatesFromDate:(NSDate *)start withHandler:(CMpedometerHandler)handler;
代码

 [self.pedometer startpedometerUpdatesFromDate:fromDate withHandler:^(CMpedometerData * _Nullable pedometerData, NSError * _Nullable error) {
     // 如果没有错误,具体信息从pedometerData参数中获取
 }];
不需要使用的时候,调用 stoppedometerUpdates 方法停止更新

 [self.pedometer stoppedometerUpdates];
如果不需要实时更新数据,可直接调用

- (void)querypedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMpedometerHandler)handler;
查询某个时间段内的数据,不过只能查询七天内的数据。

 [self.pedometer querypedometerDataFromDate:start toDate:end withHandler:^(CMpedometerData * _Nullable pedometerData, NSError * _Nullable error) {
     // 如果没有错误,具体信息从pedometerData参数中获取
 }];

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章