首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:蓝牙UUID是如何工作的?

Android:蓝牙UUID是如何工作的?
EN

Stack Overflow用户
提问于 2012-12-20 10:21:06
回答 7查看 115.8K关注 0票数 85

我不明白蓝牙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套接字。

有谁能纠正我的错误吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2019-07-04 05:02:38

在蓝牙中,所有对象都由UUID标识。这些包括服务、特征和许多其他东西。蓝牙为标准对象维护了一个分配编号的数据库,并为供应商(已支付足够预订费用的供应商)分配子范围。您可以在此处查看此列表:

https://www.bluetooth.com/specifications/assigned-numbers/

如果您正在实施标准服务(例如串行端口、键盘、耳机等)然后,您应该使用该服务的标准UUID -这将允许您与不是您开发的设备进行互操作。

如果你正在实现一个自定义服务,那么你应该生成唯一的UUID,以确保不兼容的第三方设备不会试图使用你的服务,认为它是其他东西。最简单的方法是生成随机的UUID,然后将结果硬编码到您的应用程序中(当然,在将连接到您的服务的设备中使用相同的UUID)。

票数 11
EN

Stack Overflow用户

发布于 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)。

票数 29
EN

Stack Overflow用户

发布于 2012-12-21 01:22:51

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

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

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

请参阅here

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13964342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档