核心蓝牙内的可写特性
Posted
技术标签:
【中文标题】核心蓝牙内的可写特性【英文标题】:Writable characteristic inside the core bluetooth 【发布时间】:2013-04-16 10:34:06 【问题描述】:我正在使用核心蓝牙。我添加了在特性上写入/读取的功能。在此之前,我想检查特征是否可写。为此我使用了characteristic.properties 我的代码是:
if (characteristic.properties==CBCharacteristicPropertyRead)
[peripheralDevice readValueForCharacteristic:characteristic];
else if(characteristic.properties==CBCharacteristicPropertyWrite)
[peripheralDevice setNotifyValue:YES forCharacteristic:characteristic];
NSLog(@"the property :%d",currentCharacteristic.properties );
这里是文档中 Characteristic.properties 的枚举:
typedef NS_ENUM(NSInteger, CBCharacteristicProperties)
CBCharacteristicPropertyBroadcast = 0x01,
CBCharacteristicPropertyRead = 0x02,
CBCharacteristicPropertyWriteWithoutResponse = 0x04,
CBCharacteristicPropertyWrite = 0x08,
CBCharacteristicPropertyNotify = 0x10,
CBCharacteristicPropertyIndicate = 0x20,
CBCharacteristicPropertyAuthenticatedSignedWrites = 0x40,
CBCharacteristicPropertyExtendedProperties = 0x80,
CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0) = 0x100,
CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0) = 0x200
;
它可以很好地从特征中读取值。但问题是在写入值时它不会进入第二个循环。我已经用可写属性设置了特性。我得到了我检查过的两个外围设备的 136 in print 语句。请提出一些解决方案来解决这个问题?
【问题讨论】:
我没有完全理解,但是:你的属性是可写和可读的吗?因为,在您的if...ELSE if
中,您将进入第一个循环,但不会进入第二个循环...
你从那个 NSLog 语句中得到了什么?得到 136 看起来很奇怪,因为这个枚举的最大值应该是 9。另外,如果你一直得到 136,那么读取部分也不起作用。
【参考方案1】:
通过使用 ANDing 操作解决了这个问题:
if (characteristic.properties&CBCharacteristicPropertyRead!=0)
[peripheralDevice readValueForCharacteristic:characteristic];
【讨论】:
【参考方案2】:这是 Swift 3 的解决方案:
if characteristic.properties.contains(.write)
...
【讨论】:
以上是关于核心蓝牙内的可写特性的主要内容,如果未能解决你的问题,请参考以下文章