Android 蓝牙 UUID 理解

你的每一个赞 都是我坚持的动力 

大部分为转载 :

 http://dxjia.cn/2016/01/29/android-bluetooth-uuid/ 对Android蓝牙UUID的理解

Android 蓝牙开发常用UUID表_cc_want的博客-CSDN博客  蓝牙开发常用UUID表

先来段百度百科上的解释: 

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。

总结起来就是,UUID是根据一定算法,计算得到的一长串数字,这个数字的产生使用了多种元素,所以使得这串数字不会重复,每次生成都会产生不一样的序列,所以可以用来作为唯一标识。

蓝牙RFCOMM数据(SPP 串口)通信

在来看看在蓝牙中为啥会用到UUID。
在蓝牙协议中,UUID被用来标识蓝牙设备所提供的服务,并非是标识蓝牙设备本身哦,一个蓝牙设备可以提供多种服务,比如A2DP(蓝牙音频传输)、HEADFREE(免提)、PBAP(电话本)、SPP(串口通信)等等,每种服务都对应一个UUID,其中在蓝牙协议栈里,这些默认提供的profile是都有对应的UUID的,也就是默认的UUID,比如SPP00001101-0000-1000-8000-00805F9B34FB就是一个非常 well-known的UUID,基本上所有的蓝牙板不修改的话都是这个值,所以,如果是与一个蓝牙开发板进行串口通信,而蓝牙侧又不是自己可以控制的,就可以试试这个值。

当然,我们进行串口通信的开发,一般都会自己同时开发两侧,因为串口传递的数据就是数据流,没有格式之说,具体发送的数据的意义需要自己来定义,就是说自己定义规则,这就要求一端发送的数据,另一端可以理解。两者的通信基于socket进行实现,所以必须有一端做服务端,另一端做客户端。

再来说下,android里进行蓝牙串口通信的接口,以android端作为客户端为例,也就是对方蓝牙设备作为server端,等着android端来连接。
那么android端需要通过

1
public BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)

这个接口来创建一个socket,并用这个socket对connect(),UUID参数类似用来指定socket对应的端口,而server端必须也有在这个UUID上创建好server端socket上监听才可以成功连接上,两者用的UUID必须一样才可以。

所以UUID的用处就在这里。

如何使用UUID

根据上面的描述,要使用蓝牙进行串口通信,前提条件就是两侧都是你可以定义的(如果不可以,那么你可以尝试well-known SPP UUID,但双方的数据你是没办法控制的),两侧都可以自定义,这样的场景才是使用蓝牙串口通信解决问题的合理场景啊,要不然通信了,互发的数据不认识,没啥用啊。。。。

所以,这种情况,最好是使用自己生成的UUID,在windows下,命令行里执行uuidgen 就可以得到一个,类似:

1
14c5449a-6267-4c7e-bd10-63dd79740e5d

这样的好处就是,只有我们自己的设备可以通信,别人的UUID来连接是连接不上的,我们也不会连接上别人的设备。

当然,你也可以选择well-known的UUID,这么干的也不少,这样有个缺点就是可能会有干扰,比如别人的设备也正好使用这个UUID起了个server端,那么我们的设备也使用这个UUID去连,就连上了。。。但。。。互发的数据还是不认识哦,没用。。。。

本身UUID就是用来标识唯一性的,还是自己生成吧。。。

附上,Android developer上的一段hint:

About UUID
A Universally Unique Identifier (UUID) is a standardized 128-bit format for a string ID used to uniquely identify information. The point of a UUID is that it’s big enough that you can select any random and it won’t clash. In this case, it’s used to uniquely identify your application’s Bluetooth service. To get a UUID to use with your application, you can use one of the many random UUID generators on the web, then initialize a UUID with fromString(String).
Hint: If you are connecting to a Bluetooth serial board then try using the well-known SPP UUID 00001101-0000-1000-8000-00805F9B34FB. However if you are connecting to an Android peer then please generate your own unique UUID.v

谷歌翻译:

关于UUID
通用唯一标识符(UUID)是用于唯一标识信息的字符串ID的标准化128位格式。 UUID的重点是它足够大,你可以选择任何随机的,它不会发生冲突。 在这种情况下,它用于唯一标识应用程序的蓝牙服务。 要使UUID与您的应用程序一起使用,您可以使用Web上的许多随机UUID生成器之一,然后使用fromString(String)初始化UUID。
提示:如果要连接蓝牙串行板,请尝试使用众所周知的SPP UUID 00001101-0000-1000-8000-00805F9B34FB。 但是,如果您要连接到Android对等设备,请生成您自己的唯一UUID.v

 蓝牙开发常用UUID表

Sample Services
0000180d-0000-1000-8000-00805f9b34fb    Heart Rate Service    
0000180a-0000-1000-8000-00805f9b34fb    Device Information Service    
Sample Characteristics. 
00002a37-0000-1000-8000-00805f9b34fb    Heart Rate Measurement    
00002a29-0000-1000-8000-00805f9b34fb    Manufacturer Name String    
    
GATT Services 
00001800-0000-1000-8000-00805f9b34fb    GenericAccess    
00001801-0000-1000-8000-00805f9b34fb    GenericAttribute    
 
GATT Declarations 
00002800-0000-1000-8000-00805f9b34fb    Primary Service    
00002801-0000-1000-8000-00805f9b34fb    Secondary Service    
00002802-0000-1000-8000-00805f9b34fb    Include    
00002803-0000-1000-8000-00805f9b34fb    Characteristic    
         
GATT Descriptors 
00002900-0000-1000-8000-00805f9b34fb    Characteristic Extended Properties    
00002901-0000-1000-8000-00805f9b34fb    Characteristic User Description    
00002902-0000-1000-8000-00805f9b34fb    Client Characteristic Configuration    
00002903-0000-1000-8000-00805f9b34fb    Server Characteristic Configuration    
00002904-0000-1000-8000-00805f9b34fb    Characteristic Presentation Format    
00002905-0000-1000-8000-00805f9b34fb    Characteristic Aggregate Format    
00002906-0000-1000-8000-00805f9b34fb    Valid Range    
00002907-0000-1000-8000-00805f9b34fb    External Report Reference Descriptor    
00002908-0000-1000-8000-00805f9b34fb    Report Reference Descriptor    
 
GATT Characteristics 
00002a00-0000-1000-8000-00805f9b34fb    Device Name    
00002a01-0000-1000-8000-00805f9b34fb    Appearance    
00002a02-0000-1000-8000-00805f9b34fb    Peripheral Privacy Flag    
00002a03-0000-1000-8000-00805f9b34fb    Reconnection Address    
00002a04-0000-1000-8000-00805f9b34fb    PPCP    
00002a05-0000-1000-8000-00805f9b34fb    Service Changed    
         
GATT Service UUIDs 
00001802-0000-1000-8000-00805f9b34fb    Immediate Alert    
00001803-0000-1000-8000-00805f9b34fb    Link Loss    
00001804-0000-1000-8000-00805f9b34fb    Tx Power    
00001805-0000-1000-8000-00805f9b34fb    Current Time Service    
00001806-0000-1000-8000-00805f9b34fb    Reference Time Update Service    
00001807-0000-1000-8000-00805f9b34fb    Next DST Change Service    
00001808-0000-1000-8000-00805f9b34fb    Glucose    
00001809-0000-1000-8000-00805f9b34fb    Health Thermometer    
0000180a-0000-1000-8000-00805f9b34fb    Device Information    
0000180b-0000-1000-8000-00805f9b34fb    Network Availability    
0000180d-0000-1000-8000-00805f9b34fb    Heart Rate    
0000180e-0000-1000-8000-00805f9b34fb    Phone Alert Status Service    
0000180f-0000-1000-8000-00805f9b34fb    Battery Service    
00001810-0000-1000-8000-00805f9b34fb    Blood Pressure    
00001811-0000-1000-8000-00805f9b34fb    Alert Notification Service    
00001812-0000-1000-8000-00805f9b34fb    Human Interface Device    
00001813-0000-1000-8000-00805f9b34fb    Scan Parameters    
00001814-0000-1000-8000-00805f9b34fb    Running Speed and Cadence    
00001816-0000-1000-8000-00805f9b34fb    Cycling Speed and Cadence    
00001818-0000-1000-8000-00805f9b34fb    Cycling Power    
00001819-0000-1000-8000-00805f9b34fb    Location and Navigation    
     
GATT Characteristic UUIDs 
00002a06-0000-1000-8000-00805f9b34fb    Alert Level    
00002a07-0000-1000-8000-00805f9b34fb    Tx Power Level    
00002a08-0000-1000-8000-00805f9b34fb    Date Time    
00002a09-0000-1000-8000-00805f9b34fb    Day of Week    
00002a0a-0000-1000-8000-00805f9b34fb    Day Date Time    
00002a0c-0000-1000-8000-00805f9b34fb    Exact Time 256    
00002a0d-0000-1000-8000-00805f9b34fb    DST Offset    
00002a0e-0000-1000-8000-00805f9b34fb    Time Zone    
00002a0f-0000-1000-8000-00805f9b34fb    Local Time Information    
00002a11-0000-1000-8000-00805f9b34fb    Time with DST    
00002a12-0000-1000-8000-00805f9b34fb    Time Accuracy    
00002a13-0000-1000-8000-00805f9b34fb    Time Source    
00002a14-0000-1000-8000-00805f9b34fb    Reference Time Information    
00002a16-0000-1000-8000-00805f9b34fb    Time Update Control Point    
00002a17-0000-1000-8000-00805f9b34fb    Time Update State    
00002a18-0000-1000-8000-00805f9b34fb    Glucose Measurement    
00002a19-0000-1000-8000-00805f9b34fb    Battery Level    
00002a1c-0000-1000-8000-00805f9b34fb    Temperature Measurement    
00002a1d-0000-1000-8000-00805f9b34fb    Temperature Type    
00002a1e-0000-1000-8000-00805f9b34fb    Intermediate Temperature    
00002a21-0000-1000-8000-00805f9b34fb    Measurement Interval    
00002a22-0000-1000-8000-00805f9b34fb    Boot Keyboard Input Report    
00002a23-0000-1000-8000-00805f9b34fb    System ID    
00002a24-0000-1000-8000-00805f9b34fb    Model Number String    
00002a25-0000-1000-8000-00805f9b34fb    Serial Number String    
00002a26-0000-1000-8000-00805f9b34fb    Firmware Revision String    
00002a27-0000-1000-8000-00805f9b34fb    Hardware Revision String    
00002a28-0000-1000-8000-00805f9b34fb    Software Revision String    
00002a29-0000-1000-8000-00805f9b34fb    Manufacturer Name String    
00002a2a-0000-1000-8000-00805f9b34fb    IEEE 11073-20601 Regulatory Certification Data List    
00002a2b-0000-1000-8000-00805f9b34fb    Current Time    
00002a31-0000-1000-8000-00805f9b34fb    Scan Refresh    
00002a32-0000-1000-8000-00805f9b34fb    Boot Keyboard Output Report    
00002a33-0000-1000-8000-00805f9b34fb    Boot Mouse Input Report    
00002a34-0000-1000-8000-00805f9b34fb    Glucose Measurement Context    
00002a35-0000-1000-8000-00805f9b34fb    Blood Pressure Measurement    
00002a36-0000-1000-8000-00805f9b34fb    Intermediate Cuff Pressure    
00002a37-0000-1000-8000-00805f9b34fb    Heart Rate Measurement    
00002a38-0000-1000-8000-00805f9b34fb    Body Sensor Location    
00002a39-0000-1000-8000-00805f9b34fb    Heart Rate Control Point    
00002a3e-0000-1000-8000-00805f9b34fb    Network Availability    
00002a3f-0000-1000-8000-00805f9b34fb    Alert Status    
00002a40-0000-1000-8000-00805f9b34fb    Ringer Control Point    
00002a41-0000-1000-8000-00805f9b34fb    Ringer Setting    
00002a42-0000-1000-8000-00805f9b34fb    Alert Category ID Bit Mask    
00002a43-0000-1000-8000-00805f9b34fb    Alert Category ID    
00002a44-0000-1000-8000-00805f9b34fb    Alert Notification Control Point    
00002a45-0000-1000-8000-00805f9b34fb    Unread Alert Status    
00002a46-0000-1000-8000-00805f9b34fb    New Alert    
00002a47-0000-1000-8000-00805f9b34fb    Supported New Alert Category    
00002a48-0000-1000-8000-00805f9b34fb    Supported Unread Alert Category    
00002a49-0000-1000-8000-00805f9b34fb    Blood Pressure Feature    
00002a4a-0000-1000-8000-00805f9b34fb    HID Information    
00002a4b-0000-1000-8000-00805f9b34fb    Report Map    
00002a4c-0000-1000-8000-00805f9b34fb    HID Control Point    
00002a4d-0000-1000-8000-00805f9b34fb    Report    
00002a4e-0000-1000-8000-00805f9b34fb    Protocol Mode    
00002a4f-0000-1000-8000-00805f9b34fb    Scan Interval Window    
00002a50-0000-1000-8000-00805f9b34fb    PnP ID    
00002a51-0000-1000-8000-00805f9b34fb    Glucose Feature    
00002a52-0000-1000-8000-00805f9b34fb    Record Access Control Point    
00002a53-0000-1000-8000-00805f9b34fb    RSC Measurement    
00002a54-0000-1000-8000-00805f9b34fb    RSC Feature    
00002a55-0000-1000-8000-00805f9b34fb    SC Control Point    
00002a5b-0000-1000-8000-00805f9b34fb    CSC Measurement    
00002a5c-0000-1000-8000-00805f9b34fb    CSC Feature    
00002a5d-0000-1000-8000-00805f9b34fb    Sensor Location    
00002a63-0000-1000-8000-00805f9b34fb    Cycling Power Measurement    
00002a64-0000-1000-8000-00805f9b34fb    Cycling Power Vector    
00002a65-0000-1000-8000-00805f9b34fb    Cycling Power Feature    
00002a66-0000-1000-8000-00805f9b34fb    Cycling Power Control Point    
00002a67-0000-1000-8000-00805f9b34fb    Location and Speed    
00002a68-0000-1000-8000-00805f9b34fb    Navigation    
00002a69-0000-1000-8000-00805f9b34fb    Position Quality    
00002a6a-0000-1000-8000-00805f9b34fb    LN Feature    
00002a6b-0000-1000-8000-00805f9b34fb    LN Control Point");

坚持 每天进步一点点

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。UUID通常是一个128位的数字,可以用来识别蓝牙设备上的服务或特征,并实现设备之间的通信。 在Android中,蓝牙设备的UUID通常是由16进制表示的,可以分成两种类型:标准UUID和自定义UUID。标准UUID是由蓝牙SIG(蓝牙特别兴趣小组)定义的,用于识别通用的蓝牙服务。自定义UUID是由开发者自己定义的,用于识别自定义的蓝牙服务或特征。 在Android中,蓝牙UUID的作用非常重要。当使用蓝牙进行设备之间的通信时,首先需要确保两个设备使用相同的UUID来识别服务或特征。只有相同的UUID,设备才能正确地识别和连接到对方,并进行数据的传输和交互。 在开发Android应用程序时,开发者可以使用UUID类来生成蓝牙UUIDUUID类提供了几种静态方法,可以生成不同类型的蓝牙UUID,如随机UUID、基于名称的UUID等。开发者可以根据自己的需求选择合适的方法来生成蓝牙UUID,并将其用于设备之间的通信。 总之,Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。它在设备之间的蓝牙通信中起着至关重要的作用,确保设备能够正确识别和连接到对方,并进行数据的传输和交互。 ### 回答2: Android蓝牙UUID(Universally Unique Identifier)是一个用于唯一标识蓝牙设备或服务的字符串。它的作用是确保在蓝牙通信中不会发生冲突,并且能够准确地识别和连接到目标设备或服务。 在Android中,UUID由128位的16进制数字组成。它可以被分为两种类型:标准UUID和自定义UUID。 标准UUID是由蓝牙SIG(Bluetooth Special Interest Group)预定义的一些常见服务或特性所使用的。例如,0x1101是蓝牙串口通信(SPP)的标准UUID。使用标准UUID的好处是可以确保设备之间的互操作性,并且可以在不同的Android设备上进行广泛的使用。 除了标准UUID外,开发者还可以在应用程序中定义自己的UUID。这些自定义UUID在应用程序中独一无二,并且可以被用于特定的蓝牙服务或特性。例如,如果开发者创建了一个用于传输文件的蓝牙服务,他可以定义一个唯一的UUID来标识该服务。 在Android中,获取设备或服务的UUID是非常重要的。它可以用于设备之间的配对和连接,并且可以确保数据的安全性和准确性。开发者可以使用Android蓝牙API来获取蓝牙设备的UUID,并将其用于蓝牙通信的不同阶段,例如发现设备、连接设备和交换数据。 总之,Android蓝牙UUID是一个用于标识蓝牙设备或服务的唯一字符串。它可以是标准UUID或自定义UUID,它们在蓝牙通信过程中起着关键的作用。开发者可以使用Android蓝牙API来获取和使用UUID,以实现设备之间的蓝牙通信。 ### 回答3: 在Android中,蓝牙UUID(Universally Unique Identifier)是用来唯一标识蓝牙服务或特征的。UUID是一个128位长的数字,用十六进制表示。Android蓝牙UUID由两部分组成:基本UUID和16位的UUID。 基本UUID蓝牙特殊产生的32位数,用于生成蓝牙列表上的唯一标识符。每个蓝牙服务或特征都有一个基本UUID。 16位UUID是在基本UUID的基础上进行自定义的,用于标识特定的蓝牙服务或特征。16位UUID是由用户自定义的UUID与基本UUID结合而成,确保每个蓝牙服务或特征都有唯一的标识符。 通过使用UUIDAndroid蓝牙设备可以在发现和连接蓝牙设备时进行标识。例如,当一个设备作为服务器提供蓝牙服务时,它会公开一个UUID。其他设备可以搜索附近的蓝牙设备并通过UUID连接到该设备。 在开发Android应用程序时,开发人员可以使用UUID来建立蓝牙连接、发送和接收数据等。在创建蓝牙连接时,设备之间必须使用相同的UUID才能成功连接,这样确保了设备之间的通信准确性。 总之,Android蓝牙UUID是用于唯一标识蓝牙服务和特征的标识符,通过UUID可以实现设备之间的连接和通信。通过合理地使用蓝牙UUID,可以更好地管理蓝牙设备的连接和数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值