Android 混淆特征/描述符寻址和UUID

Android 混淆特征/描述符寻址和UUID,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我一直认为,对于BLE外围设备上的每个特征/服务/描述符,都有一个唯一的UUID。我认为UUID不仅描述了它提供的内容,还为它提供了一个独特的句柄。基本上,我认为传输层使用它来识别外围设备和中心设备之间的特定实例 但在使用Android时,我发现要拥有一个应呈报的特征,不仅需要使用setCharacteristicNotificationAPI,还需要在一个规范化的UUID(00002902-0000-1000-8000-00805f9b34fb)上向特征请求一个特定的描述符,然后将该描述符的值

我一直认为,对于BLE外围设备上的每个特征/服务/描述符,都有一个唯一的UUID。我认为UUID不仅描述了它提供的内容,还为它提供了一个独特的句柄。基本上,我认为传输层使用它来识别外围设备和中心设备之间的特定实例

但在使用Android时,我发现要拥有一个应呈报的特征,不仅需要使用
setCharacteristicNotification
API,还需要在一个规范化的UUID(
00002902-0000-1000-8000-00805f9b34fb
)上向特征请求一个特定的描述符,然后将该描述符的值设置为允许适当的通知/指示

我不明白的是,这意味着对于我的设备具有的每一个应报告的特征,它都有一个与特定UUID关联的描述符。如果我有5个应报告的特征,我将有5个不同的描述符,但都具有相同的UUID。那么,当Android设备写入其中一个描述符时,它使用什么地址来指定外观相似的描述符呢?这些都是在后台神奇地管理的吗?

UUID只是描述了它是什么样的服务/特征/描述符

(G)ATT db构建在称为属性的元组列表(句柄、uuid、值)上。句柄是传输层用于标识属性的16位唯一标识符

GATT标准描述了一种分组值的方法。首先,您有特征声明、特征值和一组描述符,这些描述符被分组到一个特征中。然后将服务定义和多个特征组合到一个服务中

您可以按uuid查找客户机特征配置描述符,并将其分组到您感兴趣的特征,然后向其写入0x0001。Android的GATT客户端在内部查找句柄并发送写请求。你的应用程序无法访问句柄;只有高级特征对象