跳到主要内容

血压 (TSBloodPressure)

血压测量和监测接口,提供手动测量、自动监测以及历史数据同步的功能。血压数据包括收缩压和舒张压值,是心血管健康的重要指标。

前提条件

  1. 已初始化 TopStepComKit SDK 并成功连接到设备
  2. 设备支持血压功能(通过 isSupportActivityMeasureByUserisSupportAutomaticMonitoring 方法检查)
  3. 获取到 TSBloodPressureInterface 协议实例
  4. 对于数据同步,设备需要已记录血压数据

数据模型

TSBPValueItem

属性名类型说明
systolicUInt16收缩压值(mmHg)
diastolicUInt16舒张压值(mmHg)
isUserInitiatedBOOL是否为用户主动发起的测量
继承自 TSHealthValueItem包含时间戳等基础属性

TSBPDailyModel

属性名类型说明
maxSystolicItemTSBPValueItem *当天最大收缩压条目
minSystolicItemTSBPValueItem *当天最小收缩压条目
maxDiastolicItemTSBPValueItem *当天最大舒张压条目
minDiastolicItemTSBPValueItem *当天最小舒张压条目
manualItemsNSArray<TSBPValueItem *> *主动测量血压条目数组(按时间升序)
autoItemsNSArray<TSBPValueItem *> *自动监测血压条目数组(按时间升序)

枚举与常量

无特定枚举或常量定义。

回调类型

回调签名说明
void (^)(BOOL success, NSError * error)测量开始/结束回调:success 表示操作成功,error 包含失败信息
void (^)(TSBPValueItem * data, NSError * error)实时测量数据回调:data 为实时血压数据,error 包含失败信息
void (^)(NSArray<TSBPValueItem *> * bpItems, NSError * error)原始血压数据同步完成回调
void (^)(NSArray<TSBPDailyModel *> * dailyModels, NSError * error)每日血压数据同步完成回调
void (^)(TSAutoMonitorBPConfigs * configuration, NSError * error)获取自动监测配置回调

接口方法

检查设备是否支持手动血压测量

- (BOOL)isSupportActivityMeasureByUser;
参数类型说明
返回值BOOL设备是否支持手动血压测量

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

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

启动血压测量

- (void)startMeasureWithParam:(TSActivityMeasureParam *_Nonnull)measureParam
startHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))startHandler
dataHandler:(void(^_Nullable)(TSBPValueItem * _Nullable data, NSError * _Nullable error))dataHandler
endHandler:(void(^_Nullable)(BOOL success, NSError * _Nullable error))endHandler;
参数类型说明
measureParamTSActivityMeasureParam *测量活动的参数
startHandlervoid (^)(BOOL success, NSError * error)测量开始回调,success 表示是否成功启动,error 为失败信息
dataHandlervoid (^)(TSBPValueItem * data, NSError * error)实时数据回调,接收测量过程中的血压数据
endHandlervoid (^)(BOOL success, NSError * error)测量结束回调,success 表示正常结束(YES)或中断(NO),error 为异常信息

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;
TSActivityMeasureParam *param = [TSActivityMeasureParam new];
// 配置参数...

[bpInterface startMeasureWithParam:param
startHandler:^(BOOL success, NSError *error) {
if (success) {
TSLog(@"血压测量已启动");
} else {
TSLog(@"血压测量启动失败: %@", error.localizedDescription);
}
} dataHandler:^(TSBPValueItem *data, NSError *error) {
if (data) {
TSLog(@"收缩压: %hu mmHg, 舒张压: %hu mmHg", data.systolic, data.diastolic);
} else {
TSLog(@"接收数据失败: %@", error.localizedDescription);
}
} endHandler:^(BOOL success, NSError *error) {
if (success) {
TSLog(@"血压测量正常结束");
} else {
TSLog(@"血压测量异常结束: %@", error.localizedDescription);
}
}];

停止血压测量

- (void)stopMeasureCompletion:(nonnull TSCompletionBlock)completion;
参数类型说明
completionTSCompletionBlock完成回调,返回停止结果

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

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

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

- (BOOL)isSupportAutomaticMonitoring;
参数类型说明
返回值BOOL设备是否支持自动血压监测

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

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

检查设备是否支持配置监测时间段

- (BOOL)isSupportMonitorScheduleTime;
参数类型说明
返回值BOOL设备是否支持配置监测时间段

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

if ([bpInterface isSupportMonitorScheduleTime]) {
TSLog(@"设备支持配置血压监测时间段");
}

检查设备是否支持配置监测间隔

- (BOOL)isSupportMonitorScheduleInterval;
参数类型说明
返回值BOOL设备是否支持配置监测间隔

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

if ([bpInterface isSupportMonitorScheduleInterval]) {
TSLog(@"设备支持配置血压监测时间间隔");
}

配置自动血压监测

- (void)pushAutoMonitorConfigs:(TSAutoMonitorBPConfigs *_Nonnull)configuration
completion:(nonnull TSCompletionBlock)completion;
参数类型说明
configurationTSAutoMonitorBPConfigs *自动血压监测的配置参数
completionTSCompletionBlock配置完成回调

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;
TSAutoMonitorBPConfigs *config = [TSAutoMonitorBPConfigs new];
// 配置各项参数...

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

获取当前自动血压监测配置

- (void)fetchAutoMonitorConfigsWithCompletion:(nonnull void (^)(TSAutoMonitorBPConfigs *_Nullable configuration, NSError *_Nullable error))completion;
参数类型说明
completionvoid (^)(TSAutoMonitorBPConfigs *, NSError *)完成回调,返回当前配置或错误

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

[bpInterface fetchAutoMonitorConfigsWithCompletion:^(TSAutoMonitorBPConfigs *configuration, NSError *error) {
if (!error && configuration) {
TSLog(@"获取自动监测配置成功");
// 使用配置信息...
} else {
TSLog(@"获取配置失败: %@", error.localizedDescription);
}
}];

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

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSBPValueItem *> *_Nullable bpItems, NSError *_Nullable error))completion;
参数类型说明
startTimeNSTimeInterval开始时间戳(自1970年以来的秒数)
endTimeNSTimeInterval结束时间戳(自1970年以来的秒数)
completionvoid (^)(NSArray<TSBPValueItem *> *, NSError *)完成回调,返回血压测量条目数组

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-7*24*3600]; // 7天前
NSDate *endDate = [NSDate date]; // 现在

[bpInterface syncRawDataFromStartTime:[startDate timeIntervalSince1970]
endTime:[endDate timeIntervalSince1970]
completion:^(NSArray<TSBPValueItem *> *bpItems, NSError *error) {
if (!error && bpItems) {
TSLog(@"同步到 %lu 条原始血压数据", (unsigned long)bpItems.count);
for (TSBPValueItem *item in bpItems) {
TSLog(@"时间: %@, 收缩压: %hu, 舒张压: %hu",
[NSDate dateWithTimeIntervalSince1970:item.timestamp],
item.systolic, item.diastolic);
}
} else {
TSLog(@"数据同步失败: %@", error.localizedDescription);
}
}];

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

- (void)syncRawDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSBPValueItem *> *_Nullable bpItems, NSError *_Nullable error))completion;
参数类型说明
startTimeNSTimeInterval开始时间戳(自1970年以来的秒数)
completionvoid (^)(NSArray<TSBPValueItem *> *, NSError *)完成回调,返回血压测量条目数组

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-24*3600]; // 24小时前

[bpInterface syncRawDataFromStartTime:[startDate timeIntervalSince1970]
completion:^(NSArray<TSBPValueItem *> *bpItems, NSError *error) {
if (!error) {
TSLog(@"同步 %lu 条血压数据(从过去24小时)", (unsigned long)bpItems.count);
} else {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

同步指定时间范围内的每日血压数据

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
completion:(nonnull void (^)(NSArray<TSBPDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
参数类型说明
startTimeNSTimeInterval开始时间戳(自1970年以来的秒数),将自动规范化为当天00:00:00
endTimeNSTimeInterval结束时间戳(自1970年以来的秒数),将自动规范化为当天23:59:59
completionvoid (^)(NSArray<TSBPDailyModel *> *, NSError *)完成回调,返回每日血压模型数组

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-30*24*3600]; // 30天前
NSDate *endDate = [NSDate date]; // 现在

[bpInterface syncDailyDataFromStartTime:[startDate timeIntervalSince1970]
endTime:[endDate timeIntervalSince1970]
completion:^(NSArray<TSBPDailyModel *> *dailyModels, NSError *error) {
if (!error && dailyModels) {
TSLog(@"同步 %lu 天的每日血压数据", (unsigned long)dailyModels.count);
for (TSBPDailyModel *daily in dailyModels) {
TSLog(@"日期: %@, 最高收缩压: %hu, 最低收缩压: %hu",
[NSDate dateWithTimeIntervalSince1970:daily.timestamp],
[daily maxSystolic], [daily minSystolic]);
}
} else {
TSLog(@"数据同步失败: %@", error.localizedDescription);
}
}];

从指定时间同步至今的每日血压数据

- (void)syncDailyDataFromStartTime:(NSTimeInterval)startTime
completion:(nonnull void (^)(NSArray<TSBPDailyModel *> *_Nullable dailyModels, NSError *_Nullable error))completion;
参数类型说明
startTimeNSTimeInterval开始时间戳(自1970年以来的秒数),将自动规范化为当天00:00:00
completionvoid (^)(NSArray<TSBPDailyModel *> *, NSError *)完成回调,返回每日血压模型数组

代码示例:

id<TSBloodPressureInterface> bpInterface = /* 获取血压接口实例 */;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-7*24*3600]; // 7天前

[bpInterface syncDailyDataFromStartTime:[startDate timeIntervalSince1970]
completion:^(NSArray<TSBPDailyModel *> *dailyModels, NSError *error) {
if (!error && dailyModels) {
TSLog(@"同步 %lu 天的每日血压统计", (unsigned long)dailyModels.count);
for (TSBPDailyModel *daily in dailyModels) {
NSUInteger manualCount = daily.manualItems.count;
NSUInteger autoCount = daily.autoItems.count;
TSLog(@"主动测量: %lu 次, 自动监测: %lu 次", manualCount, autoCount);
}
} else {
TSLog(@"同步失败: %@", error.localizedDescription);
}
}];

每日数据模型方法

获取当天最大收缩压值

- (UInt16)maxSystolic;
参数类型说明
返回值UInt16最大收缩压值,无数据时返回0

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
UInt16 max = [daily maxSystolic];
TSLog(@"当天最大收缩压: %hu mmHg", max);

获取当天最小收缩压值

- (UInt16)minSystolic;
参数类型说明
返回值UInt16最小收缩压值,无数据时返回0

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
UInt16 min = [daily minSystolic];
TSLog(@"当天最小收缩压: %hu mmHg", min);

获取当天最大舒张压值

- (UInt16)maxDiastolic;
参数类型说明
返回值UInt16最大舒张压值,无数据时返回0

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
UInt16 max = [daily maxDiastolic];
TSLog(@"当天最大舒张压: %hu mmHg", max);

获取当天最小舒张压值

- (UInt16)minDiastolic;
参数类型说明
返回值UInt16最小舒张压值,无数据时返回0

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
UInt16 min = [daily minDiastolic];
TSLog(@"当天最小舒张压: %hu mmHg", min);

获取所有测量条目

- (NSArray<TSBPValueItem *> *)allMeasuredItems;
参数类型说明
返回值NSArray<TSBPValueItem *> *合并的主动和自动测量条目,按时间排序

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
NSArray<TSBPValueItem *> *allItems = [daily allMeasuredItems];
TSLog(@"当天总测量次数: %lu", (unsigned long)allItems.count);

从数据库字典构建每日模型

+ (NSArray<TSBPDailyModel *> *)dailyModelsFromDBDicts:(NSArray<NSDictionary *> *)dicts;
参数类型说明
dictsNSArray<NSDictionary *> *血压明细行的字典数组
返回值NSArray<TSBPDailyModel *> *排序后的每日模型数组

代码示例:

NSArray<NSDictionary *> *dbRows = /* 从数据库获取血压行 */;
NSArray<TSBPDailyModel *> *dailyModels = [TSBPDailyModel dailyModelsFromDBDicts:dbRows];
TSLog(@"构建了 %lu 个每日模型", (unsigned long)dailyModels.count);

获取调试描述

- (NSString *)debugDescription;
参数类型说明
返回值NSString *包含极值和列表条数的多行调试信息

代码示例:

TSBPDailyModel *daily = /* 获取每日模型 */;
TSLog(@"%@", [daily debugDescription]);

值项转换方法

从数据库字典数组转换为值项数组

+ (NSArray<TSBPValueItem *> *)valueItemsFromDBDicts:(NSArray<NSDictionary *> *)dicts;
参数类型说明
dictsNSArray<NSDictionary *> *数据库字典数组
返回值NSArray<TSBPValueItem *> *转换后的值项数组

从单个数据库字典转换为值项

+ (TSBPValueItem *)valueItemFromDBDict:(NSDictionary *)dict;
参数类型说明
dictNSDictionary *单个数据库字典
返回值TSBPValueItem *转换后的值项

注意事项

  1. 时间戳格式:所有时间参数均使用自1970年1月1日以来的秒数,可通过 NSDatetimeIntervalSince1970 属性获取

  2. 每日数据规范化syncDailyDataFromStartTime:endTime:completion: 方法会自动将时间参数规范化到日期边界(00:00:00 - 23:59:59),无需手动处理

  3. 数据排序:返回的血压数据始终按时间升序排列,便于直接使用或绘制趋势图

  4. 设备能力检查:使用前务必调用相应的 isSupportXXX 方法检查设备是否支持该功能,避免调用不支持的方法

  5. 回调线程:所有完成回调均在主线程调用,可直接更新 UI

  6. 用户主动测量标识TSBPValueItemisUserInitiated 属性可用于区分用户主动测量和设备自动监测的数据

  7. 实时数据处理:测量过程中 dataHandler 可能多次回调,每次返回最新的测量结果

  8. 错误处理:所有异步操作都应检查返回的 NSError 对象,不要假设操作必然成功

  9. 配置同步:修改自动监测配置后立即调用 pushAutoMonitorConfigs:completion: 使配置生效

  10. 内存管理:确保在使用回调块时避免循环引用,可使用 __weak 修饰符