For*_*ntr 74 uuid android bluetooth rfcomm
我不明白蓝牙UUID是什么意思.UUID是否表示协议(例如RFCOMM)?如果是这样,为什么这些createRfcommSocketToServiceRecord()方法需要UUID,当他们在名字中指定rfcomm时?为什么BluetoothChat示例代码有一个看似随意的,硬编码的UUID?
我的问题出现了,因为,根据这个问题,当运行4.0.4的设备尝试使用反射连接(到外部的,非Android设备)时,我得到一个空指针异常.但是,该问题的解决方案对我不起作用.UUID muuid = device.getUuids()[0].getUuid();提出异常.
编辑:我已经通过根据此答案(使用UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");)硬编码串行端口服务的UUID解决了这个问题.
我更加困惑的是为什么我需要提供一个UUID来创建一个不安全的rfcomm套接字,createInsecureRfcommSocketToServiceRecord(),但不使用反射方法.
任何人都可以理顺我吗?
GVi*_*i82 25
UUID用于唯一标识信息.它标识蓝牙设备提供的特定服务.该标准定义了一个基本的BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB.
诸如医疗保健传感器之类的设备可以提供服务,用预定义的代码替换前八位数字.例如,提供RFCOMM连接的设备使用短代码:0x0003
因此,Android手机可以连接到设备,然后使用服务发现协议(SDP)来查找它提供的服务(UUID).
在许多情况下,您不需要使用这些固定的UUID.例如,在您创建聊天应用程序的情况下,一部Android手机与使用相同应用程序的另一部Android手机进行交互,因此使用相同的UUID.
因此,您可以使用Web上的许多随机UUID生成器之一(例如)为您的应用程序设置任意UUID .
nul*_*ent 21
它通常代表蓝牙设备支持的一些常见服务(协议).
在创建自己的rfcomm服务器(with listenUsingRfcommWithServiceRecord)时,您应该指定自己的UUID,以便连接到它的客户端可以识别它; 这是createRfcommSocketToServiceRecord需要UUID参数的原因之一.
否则,一些常见服务具有相同的UUID,只需找到您需要的并使用它.
看到这里
Dav*_* C. 10
在蓝牙中,所有对象都由 UUID 标识。这些包括服务、特性和许多其他东西。蓝牙为标准对象维护一个分配编号的数据库,并为供应商(已支付足够预订费用)分配子范围。您可以在此处查看此列表:
https://www.bluetooth.com/specifications/assigned-numbers/
如果您正在实施标准服务(例如串行端口、键盘、耳机等),那么您应该使用该服务的标准 UUID - 这将允许您与未开发的设备进行互操作。
如果您正在实施自定义服务,那么您应该生成唯一的 UUID,以确保不兼容的第三方设备不会尝试使用您的服务,认为它是别的东西。最简单的方法是生成随机的,然后在您的应用程序中对结果进行硬编码(当然,并在将连接到您的服务的设备中使用相同的 UUID)。
小智 6
UUID与Internet中的端口号概念类似.然而,蓝牙和因特网之间的区别在于,在蓝牙中,端口号由SDP(服务发现协议)服务器在运行时期间动态分配,其中每个UUID被给予端口号.其他设备将询问在保留端口号下注册的SDP服务器关于设备上的可用服务,并且它将通过在不同UUID下注册而以不同的服务进行回复.
| 归档时间: | 
 | 
| 查看次数: | 89258 次 | 
| 最近记录: |