跳到主要内容

压力(TSStress)

该模块提供压力水平测量、自动监测和历史数据同步的功能。通过手动测量或设备自动监测获取用户压力数据,支持配置自动监测参数,以及同步原始数据和每日聚合数据。

前提条件

  1. 设备需支持压力测量功能
  2. 用户需授予相关健康数据权限
  3. 对于自动监测功能,设备需支持自动压力监测
  4. 时间参数使用 Unix 时间戳(秒数,自 1970 年 1 月 1 日以来)

数据模型

TSStressValueItem

单条压力测量数据模型。

属性名类型说明
stressValueUInt8压力水平值,通常范围 0–100
isUserInitiatedBOOL指示测量是否为用户主动发起
startTimeNSTimeInterval测量/时段开始时间(秒级时间戳)
endTimeNSTimeInterval测量/时段结束时间(秒级时间戳)
durationNSTimeInterval测量持续时长(秒)
valueTypeTSHealthValueType值类型标记(如最大值、最小值等)

TSStressDailyModel

按日聚合的压力数据模型。

属性名类型说明
maxStressItemTSStressValueItem *当天最大压力条目
minStressItemTSStressValueItem *当天最小压力条目
manualItemsNSArray<TSStressValueItem *> *主动测量压力条目数组(按时间升序)
autoItemsNSArray<TSStressValueItem *> *自动监测压力条目数组(按时间升序)
dayStartTimeNSTimeInterval统计日期的开始时间(00:00:00)

枚举与常量

无特殊枚举类型定义。设备支持情况通过接口方法的 BOOL 返回值检查。

回调类型

回调签名说明
void (^)(BOOL success, NSError * _Nullable error)测量开始/停止完成回调;success 表示操作是否成功
void (^)(TSStressValueItem * _Nullable data, NSError * _Nullable error)实时数据接收回调;data 为实时测量数据或 nil
void (^)(NSArray<TSStressValueItem *> * _Nullable, NSError * _Nullable error)原始数据同步完成回调
void (^)(NSArray<TSStressDailyModel *> * _Nullable, NSError * _Nullable error)每日聚合数据同步完成回调

接口方法

检查手动测量支持

- (BOOL)isSupportActivityMeasureByUser;

检查设备是否支持用户手动发起的压力测量。

返回值

返回值说明
YES设备支持手动压力测量
NO设备不支持手动压力测量

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

if ([stressInterface isSupportActivityMeasureByUser]) {
TSLog(@"设备支持手动压力测量");
} else {
TSLog(@"设备不支持手动压力测量");
}

开始压力测量

- (void)startMeasureWithParam:(TSActivityMeasureParam *_Nonnull)measureParam
startHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))startHandler
dataHandler:(void(^_Nullable)(TSStressValueItem * _Nullable data, NSError * _Nullable error))dataHandler
endHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))endHandler;

使用指定参数开始压力测量,并通过回调接收测量过程事件。

参数

参数名类型说明
measureParamTSActivityMeasureParam *测量活动参数(如目标持续时长)
startHandlervoid (^)(BOOL, NSError *)测量启动回调;success 表示是否成功启动,error 为失败原因
dataHandlervoid (^)(TSStressValueItem *, NSError *)实时数据回调;data 为实时压力数据,error 为失败原因
endHandlervoid (^)(BOOL, NSError *)测量结束回调;success 表示是否正常结束(YES)或被中断(NO),error 为异常原因

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

// 创建测量参数(假设 TSActivityMeasureParam 包含持续时长等字段)
TSActivityMeasureParam *param = [[TSActivityMeasureParam alloc] init];
param.duration = 60; // 持续 60 秒

[stressInterface startMeasureWithParam:param
startHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"压力测量已启动");
} else {
TSLog(@"启动失败: %@", error.localizedDescription);
}
} dataHandler:^(TSStressValueItem * _Nullable data, NSError * _Nullable error) {
if (data) {
TSLog(@"实时压力值: %d", data.stressValue);
} else if (error) {
TSLog(@"数据接收失败: %@", error.localizedDescription);
}
} endHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"压力测量正常结束");
} else {
TSLog(@"测量被中断: %@", error.localizedDescription);
}
}];

停止压力测量

- (void)stopMeasureCompletion:(nonnull TSCompletionBlock)completion;

停止正在进行的压力测量。

参数

参数名类型说明
completionTSCompletionBlock完成回调(void (^)(NSError *) 类型)

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

[stressInterface stopMeasureCompletion:^(NSError * _Nullable error) {
if (!error) {
TSLog(@"压力测量已停止");
} else {
TSLog(@"停止失败: %@", error.localizedDescription);
}
}];

检查自动监测支持

- (BOOL)isSupportAutomaticMonitoring;

检查设备是否支持自动压力监测。

返回值

返回值说明
YES设备支持自动压力监测
NO设备不支持自动压力监测

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

if ([stressInterface isSupportAutomaticMonitoring]) {
TSLog(@"设备支持自动压力监测");
} else {
TSLog(@"设备不支持自动压力监测");
}

检查监测时间段支持

- (BOOL)isSupportMonitorScheduleTime;

检查设备是否支持配置压力监测时间段(开始和结束时间)。

返回值

返回值说明
YES设备支持配置监测时间段,TSMonitorSchedulestartTimeendTime 字段有效
NO设备不支持配置监测时间段

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

if ([stressInterface isSupportMonitorScheduleTime]) {
TSLog(@"可配置监测时间段");
} else {
TSLog(@"不支持配置监测时间段");
}

检查监测间隔支持

- (BOOL)isSupportMonitorScheduleInterval;

检查设备是否支持配置压力监测间隔时间。

返回值

返回值说明
YES设备支持配置监测间隔,TSMonitorScheduleinterval 字段有效
NO设备不支持配置监测间隔

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

if ([stressInterface isSupportMonitorScheduleInterval]) {
TSLog(@"可配置监测间隔");
} else {
TSLog(@"不支持配置监测间隔");
}

配置自动监测

- (void)pushAutoMonitorConfigs:(TSAutoMonitorConfigs *_Nonnull)configuration
completion:(nonnull TSCompletionBlock)completion;

配置设备自动压力监测参数。

参数

参数名类型说明
configurationTSAutoMonitorConfigs *自动监测配置参数
completionTSCompletionBlock完成回调(void (^)(NSError *) 类型)

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

TSAutoMonitorConfigs *config = [[TSAutoMonitorConfigs alloc] init];
// 根据设备支持情况配置各字段
// 例如设置监测时间段、间隔等

[stressInterface pushAutoMonitorConfigs:config completion:^(NSError * _Nullable error) {
if (!error) {
TSLog(@"自动监测配置已设置");
} else {
TSLog(@"配置失败: %@", error.localizedDescription);
}
}];

获取自动监测配置

- (void)fetchAutoMonitorConfigsWithCompletion:(nonnull void (^)(TSAutoMonitorConfigs *_Nullable configuration, NSError *_Nullable error))completion;

获取当前自动压力监测配置。

参数

参数名类型说明
completionvoid (^)(TSAutoMonitorConfigs *, NSError *)完成回调,返回当前配置或错误信息

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

[stressInterface fetchAutoMonitorConfigsWithCompletion:^(TSAutoMonitorConfigs * _Nullable configuration, NSError * _Nullable error) {
if (configuration) {
TSLog(@"当前自动监测配置: %@", configuration);
} else if (error) {
TSLog(@"获取配置失败: %@", error.localizedDescription);
}
}];

同步指定时间范围内的原始数据

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSStressValueItem *> *_Nullable stressItems, NSError *_Nullable error))completion;

同步指定时间范围内的原始压力测量数据。

参数

参数名类型说明
startTimeNSTimeInterval开始时间(秒级 Unix 时间戳);必须早于 endTime
endTimeNSTimeInterval结束时间(秒级 Unix 时间戳);必须晚于 startTime
completionvoid (^)(NSArray *, NSError *)完成回调,返回 TSStressValueItem 数组或错误

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

// 同步过去 7 天的原始压力数据
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
NSTimeInterval sevenDaysAgo = now - (7 * 24 * 3600);

[stressInterface syncRawDataFromStartTime:sevenDaysAgo
endTime:now
completion:^(NSArray<TSStressValueItem *> * _Nullable stressItems, NSError * _Nullable error) {
if (stressItems) {
TSLog(@"获取到 %lu 条原始压力数据", (unsigned long)stressItems.count);
for (TSStressValueItem *item in stressItems) {
TSLog(@"压力值: %d, 用户主动: %@", item.stressValue, item.isUserInitiated ? @"是" : @"否");
}
} else if (error) {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

同步从指定时间至今的原始数据

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSStressValueItem *> *_Nullable stressItems, NSError *_Nullable error))completion;

同步从指定时间至当前时刻的原始压力测量数据。

参数

参数名类型说明
startTimeNSTimeInterval开始时间(秒级 Unix 时间戳)
completionvoid (^)(NSArray *, NSError *)完成回调,返回 TSStressValueItem 数组或错误

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

// 同步从昨天开始至今的原始压力数据
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
NSTimeInterval yesterday = now - (24 * 3600);

[stressInterface syncRawDataFromStartTime:yesterday
completion:^(NSArray<TSStressValueItem *> * _Nullable stressItems, NSError * _Nullable error) {
if (stressItems) {
TSLog(@"共同步 %lu 条数据", (unsigned long)stressItems.count);
} else if (error) {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

同步指定时间范围内的每日聚合数据

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSStressDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;

同步指定时间范围内的每日聚合压力数据。

参数

参数名类型说明
startTimeNSTimeInterval开始时间(秒级 Unix 时间戳),自动规范化为该日 00:00:00
endTimeNSTimeInterval结束时间(秒级 Unix 时间戳),自动规范化为该日 23:59:59;不能为未来时间
completionvoid (^)(NSArray *, NSError *)完成回调,返回 TSStressDailyModel 数组或错误

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

// 同步过去 30 天的每日聚合压力数据
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
NSTimeInterval thirtyDaysAgo = now - (30 * 24 * 3600);

[stressInterface syncDailyDataFromStartTime:thirtyDaysAgo
endTime:now
completion:^(NSArray<TSStressDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (dailyModels) {
TSLog(@"获取到 %lu 天的数据", (unsigned long)dailyModels.count);
for (TSStressDailyModel *dailyModel in dailyModels) {
TSLog(@"日期: %f, 最大压力: %d, 最小压力: %d, 主动测量: %lu 条, 自动监测: %lu 条",
dailyModel.dayStartTime,
[dailyModel maxStress],
[dailyModel minStress],
(unsigned long)dailyModel.manualItems.count,
(unsigned long)dailyModel.autoItems.count);
}
} else if (error) {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

同步从指定时间至今的每日聚合数据

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSStressDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;

同步从指定时间至当前时刻的每日聚合压力数据。

参数

参数名类型说明
startTimeNSTimeInterval开始时间(秒级 Unix 时间戳),自动规范化为该日 00:00:00
completionvoid (^)(NSArray *, NSError *)完成回调,返回 TSStressDailyModel 数组或错误

代码示例

id<TSStressInterface> stressInterface = ...; // 获取压力接口实例

// 同步从本月开始至今的每日聚合压力数据
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:now];
components.day = 1; // 设置为月初
NSDate *monthStart = [calendar dateFromComponents:components];
NSTimeInterval startTime = [monthStart timeIntervalSince1970];

[stressInterface syncDailyDataFromStartTime:startTime
completion:^(NSArray<TSStressDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (dailyModels) {
TSLog(@"本月已获取 %lu 天的聚合数据", (unsigned long)dailyModels.count);
NSUInteger totalMeasurements = 0;
for (TSStressDailyModel *dailyModel in dailyModels) {
totalMeasurements += dailyModel.manualItems.count + dailyModel.autoItems.count;
}
TSLog(@"本月共计 %lu 条测量记录", (unsigned long)totalMeasurements);
} else if (error) {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

注意事项

  1. 时间参数格式:所有时间参数均使用秒级 Unix 时间戳(自 1970 年 1 月 1 日 UTC 00:00:00 起的秒数),通过 NSDatetimeIntervalSince1970 属性获取。

  2. 手动测量前检查:在调用 startMeasureWithParam:... 前,应先调用 isSupportActivityMeasureByUser 确认设备支持手动测量。

  3. 自动监测配置前检查:在配置自动监测前,应分别调用 isSupportAutomaticMonitoringisSupportMonitorScheduleTimeisSupportMonitorScheduleInterval 检查设备支持的功能,以便正确填充 TSAutoMonitorConfigs 对象。

  4. 每日数据时间规范化syncDailyDataFromStartTime:endTime:completion: 方法会自动将 startTime 规范化为指定日期的 00:00:00,将 endTime 规范化为指定日期的 23:59:59;调用者无需手动调整。

  5. 回调线程:数据同步完成回调在主线程中执行,可直接更新 UI。

  6. 错误处理:所有接口方法都提供 NSError 参数用于错误反馈,应检查 error 对象并根据 errorCodelocalizedDescription 进行相应处理。

  7. 实时数据处理:在 startMeasureWithParam:...dataHandler 中接收实时压力数据时,应避免阻塞操作以免影响数据流传输。

  8. 数据排序:同步返回的压力数据和每日模型均按时间升序排列;同步的每日模型中,manualItemsautoItems 也按时间升序排列。