体温(Temperature)
体温模块提供了体温测量、自动监测和历史数据同步的功能。支持手动测量、自动监测以及原始数据和每日数据的同步。
前提条件
- 设备已连接到 SDK
- 确认设备支持体温测量功能(通过相应的支持检查方法)
- 对于自动监测功能,需要确认设备支持该特性
- 获取
TSTemperatureInterface实例以调用相关接口
数据模型
TSTempValueItem
| 属性名 | 类型 | 说明 |
|---|---|---|
temperature | CGFloat | 温度值(摄氏度)。根据 temperatureType 的不同表示体温或腕温 |
temperatureType | TSTemperatureType | 温度类型,区分体温(TSTemperatureTypeBody)和腕温(TSTemperatureTypeWrist) |
isUserInitiated | BOOL | 标识该测量是否为用户主动发起 |
TSTempDailyModel
| 属性名 | 类型 | 说明 |
|---|---|---|
maxBodyTempItem | TSTempValueItem * | 当天最高体温条目 |
minBodyTempItem | TSTempValueItem * | 当天最低体温条目 |
maxWristTempItem | TSTempValueItem * | 当天最高腕温条目 |
minWristTempItem | TSTempValueItem * | 当天最低腕温条目 |
manualItems | NSArray<TSTempValueItem *> * | 用户主动测量的体温数组,按时间升序排列 |
autoItems | NSArray<TSTempValueItem *> * | 设备自动监测的体温数组,按时间升序排列 |
枚举与常量
TSTemperatureType
| 枚举值 | 说明 |
|---|---|
TSTemperatureTypeBody | 体温(核心体温,正常范围:36.1-37.2°C) |
TSTemperatureTypeWrist | 腕温(腕部测量的温度,通常低于体温) |
回调类型
| 回调类型 | 说明 |
|---|---|
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.activityType = TSActivityTypeTemperature;
[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 (类型: %@)",
data.temperature,
data.temperatureType == TSTemperatureTypeBody ? @"体温" : @"腕温");
} else {
TSLog(@"接收数据失败: %@", error.localizedDescription);
}
}
endHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"温度测量已正常结束");
} else {
TSLog(@"温度测量异常结束: %@", error.localizedDescription);
}
}];
停止温度测量
- (void)stopMeasureCompletion:(nonnull TSCompletionBlock)completion;
| 参数 | 类型 | 说明 |
|---|---|---|
completion | TSCompletionBlock | 测量停止完成时的回调 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
[tempInterface stopMeasureCompletion:^(NSError * _Nullable error) {
if (!error) {
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 | 配置设置完成时的回调 |
代码示例:
id<TSTemperatureInterface> tempInterface = (id<TSTemperatureInterface>)deviceInstance;
TSAutoMonitorConfigs *config = [[TSAutoMonitorConfigs alloc] init];
config.enable = YES;
[tempInterface pushAutoMonitorConfig:config completion:^(NSError * _Nullable error) {
if (!error) {
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.enable ? @"是" : @"否");
} 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, 类型: %@",
item.temperature,
item.temperatureType == TSTemperatureTypeBody ? @"体温" : @"腕温");
}
} 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",
dailyModel.date,
[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",
dailyModel.date, 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),不需要进行单位转换