Delphi BLE 的一个 bug

本文描述了一个关于BluetoothLE1在获取特定UUID特征时遇到的问题。若不在服务列表上执行遍历,GetCharacteristic方法将返回nil。文章提供了具体的解决步骤。

这个莫名其妙的 bug 浪费了我 N 多个小时,为了搞清楚原因俺熬夜到1点。

这个BUG是这样的:

BluetoothLE1 第一个操作是 DiscoverDevice,扫描发现周围的蓝牙设备。扫描后,BluetoothLE1 内部有一个扫描到的设备对象列表;

第二个操作是针对某个设备,执行对该设备提供哪些服务进行一个扫描发现操作:DiscoverServices。执行完成后,BluetoothLE1内部有一个服务对象列表,同时每个服务内还有一个该服务拥有的特征对象列表。

然后,采用 BluetoothLE1.GetCharacteristic(AService, ChaUUID); 就能获得指定UUID的特征对象。我们和 BLE 设备通信的最终目的就是读设备的某个值或者写某个值(接收数据或者发送数据),就是要读写这个特征对象。

BUG 来了:如果不对服务列表做一次 for 循环操作,BluetoothLE1.GetCharacteristic 这个方法一定是返回 nil,也就是找不到你要的特征对象。

解决方法:做 BluetoothLE1.GetCharacteristic 之前,先对它做一个循环:

for i := 0 to AService.Characteristics.Count -1 do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值