Android:蓝牙UUID如何工作?

我不明白什么是蓝牙UUID表示。 UUID是否表示协议(例如RFCOMM)? 如果是这样,那么为什么createRfcommSocketToServiceRecord()方法需要UUID,当它们在其名称中指定rfcomm权限时? 为什么BluetoothChat示例代码有一个看似任意的硬编码UUID?

我的问题出现是因为,根据这个问题,当运行4.0.4的设备尝试使用反射连接(到外部非Android设备)时,我得到空指针异常。 但是,这个问题的解决方案并不适合我。 UUID muuid = device.getUuids()[0].getUuid(); 引发了一个例外。

编辑 :我解决了这个问题,硬编码的串口服务的UUID按照这个答案(使用UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); )。

为什么我需要提供一个UUID来使用createInsecureRfcommSocketToServiceRecord(),创建一个不安全的rfcomm套接字createInsecureRfcommSocketToServiceRecord(),而不是使用反射方法,这让我更加困惑。

任何人都可以理顺我吗?


它通常代表蓝牙设备支持的一些常见服务(协议)。

在创建自己的rfcomm服务器时(使用listenUsingRfcommWithServiceRecord ),您应该指定您自己的UUID,以便连接到它的客户端可以识别它; 这是createRfcommSocketToServiceRecord需要UUID参数的原因之一。

否则,一些常见的服务具有相同的UUID,只需找到您需要的一个并使用它。

看这里


UUID用于唯一标识信息。 它识别由蓝牙设备提供的特定服务。 该标准定义了一个基本的BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB

诸如医疗传感器之类的设备可以提供服务,用前面的代码代替前八位数字。 例如,提供RFCOMM连接的设备使用短代码:0x0003

因此,Android手机可以连接到设备,然后使用服务发现协议(SDP)找出它提供的服务(UUID)。

在很多情况下,您不需要使用这些固定的UUID。 例如,在您创建聊天应用程序的情况下,一个Android手机会与另一个使用相同应用程序并因此具有相同UUID的Android手机进行交互。

因此,您可以使用例如Web上许多随机UUID生成器之一(例如)为应用程序设置任意UUID。


UUID在概念上类似于Internet中的端口号。 但是,蓝牙和互联网的区别在于,在蓝牙中,端口号由SDP(服务发现协议)服务器在运行时动态分配,其中每个UUID都有一个端口号。 其他设备将询问SDP服务器(注册在保留的端口号下)关于设备上的可用服务,并且它将通过在不同的UUID下注册而以不同的服务进行区分。

链接地址: http://www.djcxy.com/p/70115.html

上一篇: Android: How do bluetooth UUIDs work?

下一篇: Is there known URI scheme or URN namespace for Unicode characters?