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?