最近遇到了一个BLE的项目,花时间恶补了下相关的知识,这里记录下来备忘。这篇笔记是纯协议的,先大概了解ble的协议和流程,能帮助我们更好的编码
Ble设备的发现实际上靠的是Advertising(广播)机制。广播也有人管它叫做Beacon,我没有在官方文档里面查找到这个词,但是从网络上的文章来看,它们差不多就是同一个东西。
基于广播发现Ble设备有两种方式:
由于这两种方式都基于广播,所以它们的数据格式是一样的。广播会自带一些信息,例如设备的名称、MAC地址等。除了自带的数据之外,我们还能携带一些额外的信息数据。根据 官方 的 文档 ,可以看到这个额外数据的具体格式如下:
可以看到广播数据里面包含多个AD Structure。每个AD Structure分为两个部分:数据段长度(1字节)+数据段(N字节)。数据段又分为头1个字节的AD Type标识类型和剩余的AD Data具体数据。
注意看最后的Non-significant part,有时候在安卓的回调里面会在byte数组的最后看到一堆的0x0,这个实际上也是定义在协议里面正常的无意义数据,我们直接忽略它们就好。
举个实际的例子,在手机上使用ble搜索应用搜索我司开发的蓝牙设备,查看其广播数据:
可以看到广播数据0x0319C703020104030312180C094D41584559455F353146300C16791300000002000000735C,实际有5个AD Structure。
AD Type如上图所说可以去蓝牙协议的 官方 查看[Generic Access Profile文档]( >
1、ls -l /dev/disk/by-uuid
2、blkid /dev/sda5
如何在Linux 中获取硬盘分区或文件系统的UUID?
无法做到,包括后端语言也无法在 Web 中获取 UUID。
基于安全问题,JavaScript 无法获取到设备的 UUID,也没有接口可以获取 UUID。
如果 JavaScript 可以轻松做到,安卓设备的 APP 权限岂不是花瓶?!
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。
UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。
// 如果使用的JDK15的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID:javautilUUID,直接调用即可
UUID uuid = UUIDrandomUUID();
String s = UUIDrandomUUID()toString();//用来生成数据库的主键id非常不错。。
//UUID是由一个十六位的数字组成,表现出来的形式例如
//550E8400-E29B-11D4-A716-446655440000
以上就是关于安卓BLE开发笔记(一) BLE协议入门全部的内容,包括:安卓BLE开发笔记(一) BLE协议入门、如何查看linux硬盘的uuid、JS怎么能实现获取设备的UUID,比如手机访问这个地址可以获取它的UUID。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)