Xamarin.ios 使用蓝牙在iOS中写入通知描述符值

Xamarin.ios 使用蓝牙在iOS中写入通知描述符值,xamarin.ios,bluetooth-lowenergy,Xamarin.ios,Bluetooth Lowenergy,我正在使用Plugin.BLE迭代蓝牙设备的服务/特征/描述符。当我找到要查找的描述符时,我会尝试通过将02-00写入描述符来启用通知。这适用于Android设备,但在iOS上,我得到一个错误: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Client Characteristic Configuration descriptors must be configured using

我正在使用Plugin.BLE迭代蓝牙设备的服务/特征/描述符。当我找到要查找的描述符时,我会尝试通过将02-00写入描述符来启用通知。这适用于Android设备,但在iOS上,我得到一个错误:

Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason:  Client Characteristic Configuration descriptors must be configured using setNotifyValue:forCharacteristic
有问题的C#代码如下所示:

await descriptor.WriteAsync(new byte[2] { 02, 00 });

在iOS设备上是否有其他方式来启用通知

显然,这是必须重构为接口/平台实现模式的特定于平台的问题之一。因此,对于iOS版本的应用程序,为了实现上述目标,我必须针对CoreBooth编写代码。一旦有了设备/服务/特征/客户端配置描述符,就可以调用以下命令:

peripheral.SetNotifyValue(true, characteristic);
设置该值后,将向外围代理发出回调:

public override void UpdatedCharacterteristicValue(CBPeripheral peripheral, CBCharacteristic characteristic, NSError error) { }

从那以后,我可以继续我以前的工作

显然,这是必须重构为接口/平台实现模式的特定于平台的问题之一。因此,对于iOS版本的应用程序,为了实现上述目标,我必须针对CoreBooth编写代码。一旦有了设备/服务/特征/客户端配置描述符,就可以调用以下命令:

peripheral.SetNotifyValue(true, characteristic);
设置该值后,将向外围代理发出回调:

public override void UpdatedCharacterteristicValue(CBPeripheral peripheral, CBCharacteristic characteristic, NSError error) { }

从那以后,我可以继续我以前的工作

您好,您的意思是这段代码(
wait descriptor.WriteAsync(新字节[2]{02,00});
)在IOS中不工作吗?@JuniorJiang MSFT是的。iOS抛出了一个错误,我认为这与将02-00写入描述符会打开通知这一事实有关。我相信iOS有一个特定的方法SetNotifyValue,但这个方法没有公开给我。好的,如果每次都发生在iOS中,它需要尝试使用本机方法来检查。嗨,你是说这段代码(
wait descriptor.WriteAsync(新字节[2]{02,00};
)在iOS中不工作吗?@JuniorJiang MSFT是的。iOS抛出了一个错误,我认为这与将02-00写入描述符会打开通知这一事实有关。我相信iOS有一个特定的方法SetNotifyValue,但该方法没有向我公开。好的,如果每次都发生在iOS中,它需要尝试使用本机方法来检查它。