体温(Temperature)
体温模块提供体温测量、自动监测和历史数据同步功能。一次采样可能同时包含体温和腕温,SDK 使用一个 TSTempValueItem 表示同一采样事件,避免拆成两条时间相同的记录。
前提条件
- 设备已连接到 SDK
- 确认设备支持体温测量功能(通过相应的支持检查方法)
- 对于自动监测功能,需要确认设备支持该特性
- 获取
TSTemperatureInterface实例以调用相关接口
数据模型
TSTempValueItem
| 属性名 | 类型 | 说明 |
|---|---|---|
bodyTemperature | CGFloat | 体温(摄氏度);正数表示有效值,0 表示本次采样没有体温数据 |
wristTemperature | CGFloat | 腕温(摄氏度);正数表示有效值,0 表示本次采样没有腕温数据 |
isUserInitiated | BOOL | 标识该测量是否为用户主动发起 |
bodyTemperature 与 wristTemperature 属于同一次采样,可以同时有效,也可以只有一个有效。只有两者都为 0 时,该条目才表示没有有效温度数据。
此版本将温度模型调整为成对字段,属于破坏性变更。升级后必须直接读取
bodyTemperature和wristTemperature。
TSTempDailyModel
| 属性名 | 类型 | 说明 |
|---|---|---|
maxBodyTempItem | TSTempValueItem * | 当天体温最高的采样条目,独立基于有效 bodyTemperature 计算 |
minBodyTempItem | TSTempValueItem * | 当天体温最低的采样条目,独立基于有效 bodyTemperature 计算 |
maxWristTempItem | TSTempValueItem * | 当天腕温最高的采样条目,独立基于有效 wristTemperature 计算 |
minWristTempItem | TSTempValueItem * | 当天腕温最低的采样条目,独立基于有效 wristTemperature 计算 |
manualItems | NSArray<TSTempValueItem *> * | 用户主动采样事件,按时间升序排列;成对温度只出现一次 |
autoItems | NSArray<TSTempValueItem *> * | 设备自动采样事件,按时间升序排列;成对温度只出现一次 |
回调类型
| 回调类型 | 说明 |
|---|---|
void (^)(BOOL isSuccess, NSError *error) | TSCompletionBlock,用于停止测量及配置操作完成回调,包含成功标志和错误信息 |
void (^)(BOOL success, NSError *error) | 用于测量开始与结束的回调,包含成功标志和错误信息 |
void (^)(TSTempValueItem *data, NSError *error) | 用于接收实时测量数据的回调,返回温度数据或错误信息 |
void (^)(NSArray<TSTempValueItem *> *tempItems, NSError *error) | 用于原始温度数据同步完成的回调 |
void (^)(NSArray<TSTempDailyModel *> *dailyModels, NSError *error) | 用于每日温度数据同步完成的回调 |
void (^)(TSAutoMonitorConfigs *configuration, NSError *error) | 用于获取自动监测配置的回调 |
接口方法
检查设备是否支持手动温度测量
- (BOOL)isSupportActivityMeasureByUser;
| 参数 | 类型 | 说明 |
|---|---|---|
| 返回值 | BOOL | YES 表示设备支持手动温度测量,NO 表示不支持 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
BOOL isSupported = [tempInterface isSupportActivityMeasureByUser];
if (isSupported) {
TSLog(@"设备支持手动温度测量");
} else {
TSLog(@"设备不支持手动温度测量");
}
开始温度测量
- (void)startMeasureWithParam:(TSActivityMeasureParam *_Nonnull)measureParam
startHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))startHandler
dataHandler:(void(^_Nullable)(TSTempValueItem * _Nullable data, NSError * _Nullable error))dataHandler
endHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))endHandler;
| 参数 | 类型 | 说明 |
|---|---|---|
measureParam | TSActivityMeasureParam * | 测量活动的参数配置 |
startHandler | void (^)(BOOL success, NSError *error) | 测量开始或失败时的回调。success 表示测量是否成功开始,error 为失败时的错误信息 |
dataHandler | void (^)(TSTempValueItem *data, NSError *error) | 接收实时测量数据的回调。data 为实时温度数据,error 为错误信息 |
endHandler | void (^)(BOOL success, NSError *error) | 测量结束时的回调。success 表示测量是否正常结束,error 为异常结束时的错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
TSActivityMeasureParam *param = [[TSActivityMeasureParam alloc] init];
param.measureType = TSMeasureTypeTemperature;
[tempInterface startMeasureWithParam:param
startHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"温度测量已启动");
} else {
TSLog(@"启动温度测量失败: %@", error.localizedDescription);
}
}
dataHandler:^(TSTempValueItem * _Nullable data, NSError * _Nullable error) {
if (data) {
TSLog(@"实时体温: %.1f°C, 腕温: %.1f°C",
data.bodyTemperature,
data.wristTemperature);
} else {
TSLog(@"接收数据失败: %@", error.localizedDescription);
}
}
endHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"温度测量已正常结束");
} else {
TSLog(@"温度测量异常结束: %@", error.localizedDescription);
}
}];
停止温度测量
- (void)stopMeasureCompletion:(nonnull TSCompletionBlock)completion;
| 参数 | 类型 | 说明 |
|---|---|---|
completion | TSCompletionBlock | 测量停止完成时的回调,参数为 isSuccess 和 error |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
[tempInterface stopMeasureCompletion:^(BOOL isSuccess, NSError * _Nullable error) {
if (isSuccess) {
TSLog(@"温度测量已停止");
} else {
TSLog(@"停止温度测量失败: %@", error.localizedDescription);
}
}];
检查设备是否支持自动温度监测
- (BOOL)isSupportAutomaticMonitoring;
| 参数 | 类型 | 说明 |
|---|---|---|
| 返回值 | BOOL | YES 表示设备支持自动温度监测,NO 表示不支持 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
BOOL isSupported = [tempInterface isSupportAutomaticMonitoring];
if (isSupported) {
TSLog(@"设备支持自动温度监测");
} else {
TSLog(@"设备不支持自动温度监测");
}
检查设备是否支持配置监测时间段
- (BOOL)isSupportMonitorScheduleTime;
| 参数 | 类型 | 说明 |
|---|---|---|
| 返回值 | BOOL | YES 表示设备支持配置监测开始/结束时间,NO 表示不支持 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
BOOL isSupported = [tempInterface isSupportMonitorScheduleTime];
if (isSupported) {
TSLog(@"设备支持配置体温监测时间段");
}
检查设备是否支持配置监测间隔
- (BOOL)isSupportMonitorScheduleInterval;
| 参数 | 类型 | 说明 |
|---|---|---|
| 返回值 | BOOL | YES 表示设备支持配置监测间隔,NO 表示不支持 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
BOOL isSupported = [tempInterface isSupportMonitorScheduleInterval];
if (isSupported) {
TSLog(@"设备支持配置体温监测时间间隔");
}
配置自动温度监测
- (void)pushAutoMonitorConfig:(TSAutoMonitorConfigs *_Nonnull)configuration
completion:(nonnull TSCompletionBlock)completion;
| 参数 | 类型 | 说明 |
|---|---|---|
configuration | TSAutoMonitorConfigs * | 自动监测的配置参数 |
completion | TSCompletionBlock | 配置设置完成时的回调,参数为 isSuccess 和 error |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
TSAutoMonitorConfigs *config = [[TSAutoMonitorConfigs alloc] init];
config.schedule.enabled = YES;
[tempInterface pushAutoMonitorConfig:config completion:^(BOOL isSuccess, NSError * _Nullable error) {
if (isSuccess) {
TSLog(@"自动温度监测配置已设置");
} else {
TSLog(@"设置自动监测配置失败: %@", error.localizedDescription);
}
}];
获取自动温度监测配置
- (void)fetchAutoMonitorConfigsWithCompletion:(nonnull void (^)(TSAutoMonitorConfigs *_Nullable configuration, NSError *_Nullable error))completion;
| 参数 | 类型 | 说明 |
|---|---|---|
completion | void (^)(TSAutoMonitorConfigs *configuration, NSError *error) | 获取配置完成时的回调,返回当前配置或错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
[tempInterface fetchAutoMonitorConfigsWithCompletion:^(TSAutoMonitorConfigs * _Nullable configuration, NSError * _Nullable error) {
if (configuration && !error) {
TSLog(@"自动监测已启用: %@", configuration.schedule.enabled ? @"是" : @"否");
} else {
TSLog(@"获取自动监测配置失败: %@", error.localizedDescription);
}
}];
同步指定时间范围内的原始温度数据
- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSTempValueItem *> *_Nullable tempItems, NSError *_Nullable error))completion;
| 参数 | 类型 | 说明 |
|---|---|---|
startTime | NSTimeInterval | 数据同步的开始时间(1970年以来的秒数时间戳) |
endTime | NSTimeInterval | 数据同步的结束时间(1970年以来的秒数时间戳) |
completion | void (^)(NSArray<TSTempValueItem *> *tempItems, NSError *error) | 同步完成时的回调,返回原始温度数据或错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
NSTimeInterval startTime = [[NSDate dateWithTimeIntervalSinceNow:-86400] timeIntervalSince1970]; // 24小时前
NSTimeInterval endTime = [[NSDate date] timeIntervalSince1970]; // 当前时间
[tempInterface syncRawDataFromStartTime:startTime
endTime:endTime
completion:^(NSArray<TSTempValueItem *> * _Nullable tempItems, NSError * _Nullable error) {
if (tempItems && !error) {
TSLog(@"同步了 %lu 条原始温度数据", (unsigned long)tempItems.count);
for (TSTempValueItem *item in tempItems) {
TSLog(@"体温: %.1f°C, 腕温: %.1f°C",
item.bodyTemperature,
item.wristTemperature);
}
} else {
TSLog(@"同步原始数据失败: %@", error.localizedDescription);
}
}];
同步从指定时间至今的原始温度数据
- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSTempValueItem *> *_Nullable tempItems, NSError *_Nullable error))completion;
| 参数 | 类型 | 说明 |
|---|---|---|
startTime | NSTimeInterval | 数据同步的开始时间(1970年以来的秒数时间戳) |
completion | void (^)(NSArray<TSTempValueItem *> *tempItems, NSError *error) | 同步完成时的回调,返回原始温度数据或错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
NSTimeInterval startTime = [[NSDate dateWithTimeIntervalSinceNow:-604800] timeIntervalSince1970]; // 7天前
[tempInterface syncRawDataFromStartTime:startTime
completion:^(NSArray<TSTempValueItem *> * _Nullable tempItems, NSError * _Nullable error) {
if (tempItems && !error) {
TSLog(@"同步了 %lu 条原始温度数据", (unsigned long)tempItems.count);
} else {
TSLog(@"同步原始数据失败: %@", error.localizedDescription);
}
}];
同步指定时间范围内的每日温度数据
- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSTempDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
| 参数 | 类型 | 说明 |
|---|---|---|
startTime | NSTimeInterval | 数据同步的开始时间(1970年以来的秒数时间戳),将自动规范化为指定日期的 00:00:00 |
endTime | NSTimeInterval | 数据同步的结束时间(1970年以来的秒数时间戳),将自动规范化为指定日期的 23:59:59 |
completion | void (^)(NSArray<TSTempDailyModel *> *dailyModels, NSError *error) | 同步完成时的回调,返回每日温度数据或错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-604800]; // 7天前
NSDate *endDate = [NSDate date]; // 当前时间
[tempInterface syncDailyDataFromStartTime:[startDate timeIntervalSince1970]
endTime:[endDate timeIntervalSince1970]
completion:^(NSArray<TSTempDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (dailyModels && !error) {
TSLog(@"同步了 %lu 天的每日温度数据", (unsigned long)dailyModels.count);
for (TSTempDailyModel *dailyModel in dailyModels) {
TSLog(@"日期: %@, 最高体温: %.1f°C, 最低体温: %.1f°C",
[NSDate dateWithTimeIntervalSince1970:dailyModel.startTime],
[dailyModel maxBodyTemperature],
[dailyModel minBodyTemperature]);
}
} else {
TSLog(@"同步每日数据失败: %@", error.localizedDescription);
}
}];
同步从指定时间至今的每日温度数据
- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSTempDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
| 参数 | 类型 | 说明 |
|---|---|---|
startTime | NSTimeInterval | 数据同步的开始时间(1970年以来的秒数时间戳),将自动规范化为指定日期的 00:00:00 |
completion | void (^)(NSArray<TSTempDailyModel *> *dailyModels, NSError *error) | 同步完成时的回调,返回每日温度数据或错误信息 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-2592000]; // 30天前
[tempInterface syncDailyDataFromStartTime:[startDate timeIntervalSince1970]
completion:^(NSArray<TSTempDailyModel *> * _Nullable dailyModels, NSError * _Nullable error) {
if (dailyModels && !error) {
TSLog(@"同步了 %lu 天的每日温度数据", (unsigned long)dailyModels.count);
for (TSTempDailyModel *dailyModel in dailyModels) {
CGFloat maxTemp = [dailyModel maxBodyTemperature];
CGFloat minTemp = [dailyModel minBodyTemperature];
NSArray<TSTempValueItem *> *allItems = [dailyModel allMeasuredItems];
TSLog(@"日期: %@, 最高体温: %.1f°C, 最低体温: %.1f°C, 总测量数: %lu",
[NSDate dateWithTimeIntervalSince1970:dailyModel.startTime],
maxTemp, minTemp, (unsigned long)allItems.count);
}
} else {
TSLog(@"同步每日数据失败: %@", error.localizedDescription);
}
}];
注意事项
- 使用手动温度测量前,必须先通过
isSupportActivityMeasureByUser检查设备是否支持该功能 - 调用
startMeasureWithParam:startHandler:dataHandler:endHandler:时,所有回调块都是可选的,但建议至少实现startHandler和endHandler来监控测量状态 - 在调用
stopMeasureCompletion:前,确保已成功启动了测量(通过startHandler回调确认) - 自动监测配置通过
pushAutoMonitorConfig:completion:设置后,需确保设备支持该功能(通过isSupportAutomaticMonitoring确认) - 对于时间范围的同步方法,时间参数应为 Unix 时间戳(秒数),可通过
NSDate的timeIntervalSince1970属性获取 - 每日数据同步时,时间参数会自动规范化到日期边界,不需要手动调整时间
- 每日数据同步的完成回调在主线程中调用,可以安全地更新 UI
TSTempDailyModel提供了便捷方法maxBodyTemperature、minBodyTemperature等来获取聚合数据TSTempDailyModel的allMeasuredItems方法返回该天所有的测量条目(手动 + 自动),按时间升序排列- 温度单位统一为摄氏度(°C),不需要进行单位转换
- 一个
TSTempValueItem表示一次采样事件;体温和腕温可同时存在,任一字段为0只表示该分量缺失 - 温度模型只提供
bodyTemperature和wristTemperature;升级 SDK 时需同步迁移所有模型读取点