设备设置(TSSetting)
TSSetting 模块提供了设备设置管理功能,支持设备佩戴习惯、蓝牙断连震动、运动目标提醒、来电响铃、抬腕亮屏、勿扰模式、加强监测等多项设置操作。所有设置均会持久化保存在设备中,关机后仍然保留。
前提条件
- 设备已成功配对并连接
- 已获得必要的系统权限(如通话权限、蓝牙权限等)
- 蓝牙连接处于稳定状态
数据模型
TSWristWakeUpModel(抬腕亮屏设置模型)
| 属性名 | 类型 | 说明 |
|---|---|---|
isEnable | BOOL | 抬腕亮屏功能是否启用 |
startTime | NSInteger | 功能开始生效时间(从0点开始的分钟数,0-1439) |
endTime | NSInteger | 功能结束生效时间(从0点开始的分钟数,0-1439) |
TSDoNotDisturbModel(勿扰模式配置模型)
| 属性名 | 类型 | 说明 |
|---|---|---|
isEnabled | BOOL | 勿扰模式是否启用 |
isTimePeriodMode | BOOL | 是否为时段模式(YES:时段模式,NO:全天模式) |
startTime | NSInteger | 勿扰模式开始时间(从0点开始的分钟数,0-1440,时段模式时有效) |
endTime | NSInteger | 勿扰模式结束时间(从0点开始的分钟数,0-1440,时段模式时有效) |
枚举与常量
TSWearingHabit(设备佩戴习惯)
| 枚举值 | 说明 |
|---|---|
TSWearingHabitLeft | 左手佩戴,值为 0 |
TSWearingHabitRight | 右手佩戴,值为 1 |
回调类型
| 回调类型 | 说明 |
|---|---|
TSCompletionBlock | 标准完成回调,参数为 (BOOL success, NSError * _Nullable error) |
void (^)(TSWearingHabit habit, NSError * _Nullable error) | 佩戴习惯获取回调 |
void (^)(BOOL enabled, NSError * _Nullable error) | 布尔值状态获取回调 |
void (^)(TSWristWakeUpModel * _Nullable model, NSError * _Nullable error) | 抬腕亮屏设置获取回调 |
void (^)(TSDoNotDisturbModel * _Nullable model, NSError * _Nullable error) | 勿扰模式设置获取回调 |
接口方法
设置设备佩戴习惯
- (void)setWearingHabit:(TSWearingHabit)habit
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
habit | TSWearingHabit | 佩戴习惯(TSWearingHabitLeft 或 TSWearingHabitRight) |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功,error 为错误信息 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface setWearingHabit:TSWearingHabitRight
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"设置佩戴习惯成功");
} else {
TSLog(@"设置佩戴习惯失败: %@", error.localizedDescription);
}
}];
获取当前佩戴习惯
- (void)getCurrentWearingHabit:(void(^)(TSWearingHabit habit, NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(TSWearingHabit, NSError *) | 完成回调,返回当前佩戴习惯和错误信息 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getCurrentWearingHabit:^(TSWearingHabit habit, NSError * _Nullable error) {
if (!error) {
NSString *habitStr = (habit == TSWearingHabitLeft) ? @"左手" : @"右手";
TSLog(@"当前佩戴习惯: %@", habitStr);
} else {
TSLog(@"获取佩戴习惯失败: %@", error.localizedDescription);
}
}];
设置蓝牙断连震动
- (void)setBluetoothDisconnectionVibration:(BOOL)enabled
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
enabled | BOOL | 是否启用蓝牙断连震动(YES 启用,NO 禁用) |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface setBluetoothDisconnectionVibration:YES
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"蓝牙断连震动已启用");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取蓝牙断连震动状态
- (void)getBluetoothDisconnectionVibrationStatus:(void(^)(BOOL enabled, NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(BOOL, NSError *) | 完成回调,enabled 表示是否启用,error 为错误信息 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getBluetoothDisconnectionVibrationStatus:^(BOOL enabled, NSError * _Nullable error) {
if (!error) {
TSLog(@"蓝牙断连震动状态: %@", enabled ? @"启用" : @"禁用");
} else {
TSLog(@"获取状态失败: %@", error.localizedDescription);
}
}];
设置运动目标达成提醒
- (void)setExerciseGoalReminder:(BOOL)enabled
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
enabled | BOOL | 是否启用运动目标提醒(YES 启用,NO 禁用) |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface setExerciseGoalReminder:YES
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"运动目标提醒已启用");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取运动目标提醒状态
- (void)getExerciseGoalReminderStatus:(void(^)(BOOL enabled, NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(BOOL, NSError *) | 完成回调,enabled 表示是否启用 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getExerciseGoalReminderStatus:^(BOOL enabled, NSError * _Nullable error) {
if (!error) {
TSLog(@"运动目标提醒状态: %@", enabled ? @"启用" : @"禁用");
} else {
TSLog(@"获取状态失败: %@", error.localizedDescription);
}
}];
设置来电响铃
- (void)setCallRing:(BOOL)enabled
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
enabled | BOOL | 是否启用来电响铃(YES 启用,NO 禁用) |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface setCallRing:YES
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"来电响铃已启用");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取来电响铃状态
- (void)getCallRingStatus:(void(^)(BOOL enabled, NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(BOOL, NSError *) | 完成回调,enabled 表示是否启用 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getCallRingStatus:^(BOOL enabled, NSError * _Nullable error) {
if (!error) {
TSLog(@"来电响铃状态: %@", enabled ? @"启用" : @"禁用");
} else {
TSLog(@"获取状态失败: %@", error.localizedDescription);
}
}];
设置抬腕亮屏
- (void)setRaiseWristToWake:(TSWristWakeUpModel *)model
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
model | TSWristWakeUpModel * | 包含抬腕亮屏设置的模型对象 |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
TSWristWakeUpModel *model = [[TSWristWakeUpModel alloc] init];
model.isEnable = YES;
model.startTime = 480; // 8:00 AM
model.endTime = 1320; // 10:00 PM
[settingInterface setRaiseWristToWake:model
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"抬腕亮屏设置成功");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取抬腕亮屏设置
- (void)getRaiseWristToWakeStatus:(void(^)(TSWristWakeUpModel * _Nullable model,
NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(TSWristWakeUpModel *, NSError *) | 完成回调,model 为设置信息 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getRaiseWristToWakeStatus:^(TSWristWakeUpModel * _Nullable model,
NSError * _Nullable error) {
if (!error && model) {
TSLog(@"抬腕亮屏状态: %@", model.isEnable ? @"启用" : @"禁用");
TSLog(@"开始时间: %ld, 结束时间: %ld", (long)model.startTime, (long)model.endTime);
} else {
TSLog(@"获取设置失败: %@", error.localizedDescription);
}
}];
注册抬腕亮屏配置变化监听
- (void)registerRaiseWristToWakeDidChanged:(void(^)(TSWristWakeUpModel * _Nullable model,
NSError * _Nullable error))didChangeBlock;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
didChangeBlock | void (^)(TSWristWakeUpModel *, NSError *) | 配置变化时的回调 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface registerRaiseWristToWakeDidChanged:^(TSWristWakeUpModel * _Nullable model,
NSError * _Nullable error) {
if (!error && model) {
TSLog(@"抬腕亮屏配置已更新");
TSLog(@"启用状态: %@", model.isEnable ? @"是" : @"否");
TSLog(@"时间范围: %ld - %ld", (long)model.startTime, (long)model.endTime);
} else {
TSLog(@"配置更新通知失败: %@", error.localizedDescription);
}
}];
设置勿扰模式
- (void)setDoNotDisturb:(TSDoNotDisturbModel *)model
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
model | TSDoNotDisturbModel * | 包含勿扰模式设置的模型对象 |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
TSDoNotDisturbModel *model = [[TSDoNotDisturbModel alloc] init];
model.isEnabled = YES;
model.isTimePeriodMode = YES;
model.startTime = 720; // 12:00 PM
model.endTime = 840; // 2:00 PM
[settingInterface setDoNotDisturb:model
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"勿扰模式设置成功");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取勿扰模式设置
- (void)getDoNotDisturbInfo:(void(^)(TSDoNotDisturbModel * _Nullable model,
NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(TSDoNotDisturbModel *, NSError *) | 完成回调,model 为设置信息 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getDoNotDisturbInfo:^(TSDoNotDisturbModel * _Nullable model,
NSError * _Nullable error) {
if (!error && model) {
TSLog(@"勿扰模式状态: %@", model.isEnabled ? @"启用" : @"禁用");
TSLog(@"模式类型: %@", model.isTimePeriodMode ? @"时段模式" : @"全天模式");
if (model.isTimePeriodMode) {
TSLog(@"时间范围: %ld - %ld", (long)model.startTime, (long)model.endTime);
}
} else {
TSLog(@"获取设置失败: %@", error.localizedDescription);
}
}];
设置加强监测模式
- (void)setEnhancedMonitoring:(BOOL)enabled
completion:(TSCompletionBlock)completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
enabled | BOOL | 是否启用加强监测模式(YES 启用,NO 禁用) |
completion | TSCompletionBlock | 完成回调,success 表示设置是否成功 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface setEnhancedMonitoring:YES
completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"加强监测模式已启用");
} else {
TSLog(@"设置失败: %@", error.localizedDescription);
}
}];
获取加强监测模式状态
- (void)getEnhancedMonitoringStatus:(void(^)(BOOL enabled, NSError * _Nullable error))completion;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(BOOL, NSError *) | 完成回调,enabled 表示是否启用 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
[settingInterface getEnhancedMonitoringStatus:^(BOOL enabled, NSError * _Nullable error) {
if (!error) {
TSLog(@"加强监测模式状态: %@", enabled ? @"启用" : @"禁用");
} else {
TSLog(@"获取状态失败: %@", error.localizedDescription);
}
}];
检查是否支持单独健康配置
- (BOOL)isSupportIndividualHealthMonitorConfig;
参数说明
无参数
返回值说明
| 返回值 | 说明 |
|---|---|
YES | 设备支持单独的健康监测配置,各类型可独立设置 |
NO | 设备不支持单独配置,应使用全局加强监测控制 |
代码示例
id<TSSettingInterface> settingInterface = [TSKitManager shared].settingInterface;
BOOL supportIndividualConfig = [settingInterface isSupportIndividualHealthMonitorConfig];
if (supportIndividualConfig) {
TSLog(@"设备支持单独健康监测配置");
// 可以调用其他模块的单独配置接口
} else {
TSLog(@"设备不支持单独配置,使用全局加强监测控制");
// 使用 setEnhancedMonitoring: 进行全局控制
}
注意事项
-
所有设置操作均需要设备与手机保持蓝牙连接状态,断连时调用方法将返回连接错误。
-
时间相关的设置(如抬腕亮屏、勿扰模式)使用从午夜0点开始计算的分钟数表示,范围为0-1439(或0-1440)。例如:
- 8:00 AM = 480 分钟
- 12:00 PM = 720 分钟
- 10:00 PM = 1320 分钟
-
时段设置时,结束时间必须大于开始时间,否则设置可能失败。
-
调用获取方法时,如果返回值为 nil 且 error 不为空,表示获取失败,应检查错误原因。
-
设置持久化:所有设置在设备上均为持久化存储,断开蓝牙连接或关机后仍然保留。
-
在调用任何健康监测单独配置相关接口之前,应先使用
isSupportIndividualHealthMonitorConfig方法判断设备能力,避免调用不支持的接口。 -
多个监听器注册:
registerRaiseWristToWakeDidChanged:支持同时注册多个监听器,每个监听器会在配置变化时被调用,取消注册时需使用相同的 block 引用。 -
蓝牙断连振动、运动目标提醒、来电响铃等功能需要设备支持相应的硬件功能,不同设备型号可能存在功能差异。
-
获取设备设置接口通常需要1-2秒的响应时间,建议在后台线程调用以避免阻塞主线程。
-
如果设置修改后未能立即生效,可等待1-2秒后重新获取确认,或查看是否存在设备离线等异常情况。