HomeKit附件模拟器作为一个小按钮,允许不公平的设备。
鉴于它是一个附件模拟器,我认为有一些硬件编程规范允许编写取消配对功能。
但是,将其也作为HomeKit 框架的一部分来实现并允许客户端开发人员通过HomesController类(和派生类)来实现它可能是有意义的。
--> 短版:
HMService或HMCharacteristic或 HomeKit 框架中是否有任何方法可以取消与家庭的特征/服务的配对?
服务或特征不能取消配对,实际上它不需要这样做。
可以在家中取消配对附件。
您可以调用 HMHome 类的方法来删除/取消配对配件。
- (void)removeAccessory:(HMAccessory *)accessory
completionHandler:(void (^)(NSError *error))completion;
并且在 Homekit 配件模拟器中提供了Pairing - Reset按钮作为一个选项,您可以随时取消配件与 iOS 应用程序的配对。
如果您一次没有相同的设备,或者 Homekit 配置从 iOS 应用程序的设置中重置,则可能需要重置。
取消配对基本上相当于从 HomeKit 主页 (HMHome) 下移除该配件。这可以通过使用 HMHome 下的 api 调用来实现(可以通过从您的视图控制器单击按钮来触发):
示例代码:
[yourHMHome removeAccessory:accessory_ completionHandler:^(NSError *error) {
if (error) {
//Handle your error here.
} else {
//Removing, or here, un-pairing was successful, do anything else
//Example
[[YourExampleHomeStore sharedStore] updateAccessoryDelegates];
YourCompletionHandler(error);
}
}];
这回答了您关于取消配对的问题。HMService 和 HMCharacteristic 在概念上是不同的。如果您想更新(可写)HMCharacteristic 的值,那么您将在可用的 HMServices 中搜索该 HMCharacteristic。请记住,配件上可用的 HMServices 以及因此 HMCharacteristics 将根据其配对状态而完全不同。大多数读写和'paired-read'和'paired-write',当处于未配对状态时,您只能读取'附件信息服务'(名称,型号等)
现在,假设您想读取或更改(写入)HMCharacteristic 的值,假设它是序列号,步骤如下:
序列号的示例代码可能是这样的:
注意:如果附件无法访问,则返回空字符串。
+(NSString *)getSerialNumberFromHMAccessory:(HMAccessory *)accessory
{
if (!accessory || !accessory.reachable) { return @""; }
for (HMService *service in accessory.services) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"characteristicType", HMCharacteristicTypeSerialNumber];
NSArray *result = [service.characteristics filteredArrayUsingPredicate:predicate];
if (result && [result count] > 0 && [result[0] isKindOfClass:[HMCharacteristic class]]) {
HMCharacteristic *serialNumChar = (HMCharacteristic *)result[0];
NSString *serialNum = [serialNumChar valueForKey:@"value"];
if (serialNum && [serialNum length] > 0) {
NSLog(@"Found serial number: %@ for accessory named \"%@\"", serialNum, accessory.name);
return serialNum;
}
}
}
return @"";
}
无论如何,可能咆哮的时间太长了,偏离了主要问题。希望这对你有帮助。干杯。