我不明白蓝牙UUID是什么意思。UUID是否表示协议(例如RFCOMM)?如果是这样,当createRfcommSocketToServiceRecord()
方法在其名称中指定rfcomm时,为什么它们需要UUIDs呢?为什么BluetoothChat示例代码有一个看似任意的、硬编码的UUID?
我的问题出现是因为,根据this question,当运行4.0.4的设备尝试使用反射连接(到外部的非安卓设备)时,我会收到一个空指针异常。然而,这个问题的解决方案对我来说不起作用。UUID muuid = device.getUuids()[0].getUuid();
会引发一个异常。
UUID编辑:我已经通过按照this answer (使用UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
)硬编码串口服务的解决了这个问题。
我进一步感到困惑的是,为什么我需要提供一个UUID来使用createInsecureRfcommSocketToServiceRecord(),
而不是反射方法来创建不安全的rfcomm套接字。
有谁能纠正我的错误吗?
发布于 2019-07-04 05:02:38
在蓝牙中,所有对象都由UUID标识。这些包括服务、特征和许多其他东西。蓝牙为标准对象维护了一个分配编号的数据库,并为供应商(已支付足够预订费用的供应商)分配子范围。您可以在此处查看此列表:
https://www.bluetooth.com/specifications/assigned-numbers/
如果您正在实施标准服务(例如串行端口、键盘、耳机等)然后,您应该使用该服务的标准UUID -这将允许您与不是您开发的设备进行互操作。
如果你正在实现一个自定义服务,那么你应该生成唯一的UUID,以确保不兼容的第三方设备不会试图使用你的服务,认为它是其他东西。最简单的方法是生成随机的UUID,然后将结果硬编码到您的应用程序中(当然,在将连接到您的服务的设备中使用相同的UUID)。
发布于 2014-02-14 00:38:06
UUID用于唯一标识信息。它标识由蓝牙设备提供的特定服务。该标准定义了一个基本的BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
。
医疗保健传感器等设备可以提供服务,将前八位数字替换为预定义的代码。例如,提供RFCOMM连接的设备使用short code: 0x0003
因此,Android手机可以连接到设备,然后使用服务发现协议(SDP)来找出它提供的服务(UUID)。
在许多情况下,您不需要使用这些固定的UUID。例如,在创建聊天应用程序的情况下,一部Android手机与另一部使用相同应用程序的Android手机进行交互,因此使用相同的UUID。
因此,您可以为您的应用程序设置一个任意的UUID,例如,使用web上的许多随机UUID生成器之一(for example)。
发布于 2012-12-21 01:22:51
它通常表示蓝牙设备支持的一些公共服务(协议)。
在创建您自己的rfcomm服务器(使用listenUsingRfcommWithServiceRecord
)时,您应该指定您自己的UUID,以便连接到它的客户机可以识别它;这是createRfcommSocketToServiceRecord
需要UUID参数的原因之一。
否则,一些常见服务具有相同的UUID,只需找到需要的服务并使用它即可。
请参阅here
https://stackoverflow.com/questions/13964342
复制相似问题