安卓ble广播数据简析

手环,跳绳各种~

广播

蓝牙的广播包有两种: 广播包 (Advertising Data)和 响应包 (Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。

scanRecord数据

有效数据部分 :包含若干个广播数据单元,称为 AD Structure 。AD Structure 的组成是:第一个字节是长度值 Len ,表示接下来的 Len 个字节是数据部分。数据部分的第一个字节表示数据的类型 AD Type ,剩下的 Len - 1 个字节是真正的数据 AD data 。其中 AD type 非常关键,决定了 AD Data 的数据代表的是什么和怎么解析。无效数据部分 :因为广播包的长度必须是 31 个 byte,如果有效数据部 分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的,解释的时候,忽略即可。在 Android 中,系统会把这两个数据拼接在一起,返回一个 62 字节的数组。

厂商数据 0xFF

厂商自定义数据: TYPE = 0xFF,厂商自定义的数据中,前两个字节表示厂商 ID,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。
在这里插入图片描述
在这里插入图片描述

0x02010610FF1400F6A0717A01B7023400D30000000A08776F7A75696C5F30311106000045534957504C4100000001530000

第一个 字节代表广播数据单元的长度 ,02 转为10进制就是 2代表其数据长度为2 , 而数据单元的第一个字节代表类型 。
01 代表 代表物理连接功能为普通发现模式 06代表其数据类容
紧接着下一个数据单元:0B代表数据长度为11

String hex = BLEManagerUtils.bytesToHexString1(scanRecord);
//找到厂商自定义数据位置
int ffIndex = hex.indexOf("FF");
//020106 数据类容模式
if (ffIndex >= 2 && hex.startsWith("020106")) {
    //自定义数据长度
    String lenStr = hex.substring(ffIndex - 2, ffIndex);
    int len = Integer.parseInt(lenStr, 16);
    //自定义数据hex字符串
    String substring = hex.substring(ffIndex, ffIndex + 2 * len);
    //FF+厂商ID+Mac地址+数据
    String dataStr = substring.substring(2 + 4 + 12);
    //低字节
    String jj = dataStr.substring(8, 10) + dataStr.substring(6, 8);
    int count = Integer.parseInt(jj, 16);
    Log.d(TAG, "isJumping: " + count);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答Android设置BLE广播数据的问题。在Android BLE中,可以通过以下步骤设置BLE广播数据: 1. 创建AdvertiseSettings对象:AdvertiseSettings是广播设置的对象,可以通过它来设置广播模式、广播信号强度等参数。例如,可以通过以下代码创建一个高功率的广播设置对象: ``` AdvertiseSettings settings = new AdvertiseSettings.Builder() .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_HIGH_POWER) .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH) .setConnectable(false) .build(); ``` 2. 创建AdvertiseData对象:AdvertiseData是广播数据的对象,可以通过它来设置广播的内容。例如,可以通过以下代码创建一个包含设备名称和服务UUID的广播数据对象: ``` AdvertiseData data = new AdvertiseData.Builder() .setIncludeDeviceName(true) .addServiceUuid(new ParcelUuid(SERVICE_UUID)) .build(); ``` 3. 开始广播:使用BluetoothLeAdvertiser.startAdvertising()方法开始广播,可以传入AdvertiseSettings和AdvertiseData对象。例如,可以通过以下代码开始广播: ``` BluetoothLeAdvertiser advertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser(); advertiser.startAdvertising(settings, data, null); ``` 需要注意的是,在设置BLE广播数据时,需要根据具体的需求和设备类型进行设置。广播数据的内容和格式可以参考设备的文档或者使用第三方库来进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值