Android(Java)开发之从BLE广播包中解析UUID

本文旨在于解析出16位UUID,对于128位的UUID应该方法大同小异,没测试过的不贴出来


16bit UUID:

128位的UUID相当长,设备间为了识别数据的类型需要发送长达16字节的数据。为了提高传输效率,蓝牙技术联盟(SIG)定义了一个称为“UUID基数”的128位通用唯一识别码,结合一个较短的16位数使用。二者仍然遵循通用唯一识别码的分配规则,只不过在设备间传输常用的UUID时,只发送较短的16位版本,接收方收到后补上蓝牙UUID基数即可。

蓝牙UUID基数如下:

00000000 – 0000 – 1000 – 8000 – 008059B34FB

如要发送的16位UUID为0x2A01,完整的128的UUID便是:

00002A01 – 0000 – 1000 – 8000 – 008059B34FB

  • 非完整的 16 bit UUID 列表: TYPE = 0x02;
  • 完整的 16 bit UUID 列表: TYPE = 0x03;
  • 非完整的 32 bit UUID 列表: TYPE = 0x04;
  • 完整的 32 bit UUID 列表: TYPE = 0x05;
  • 非完整的 128 bit UUID 列表: TYPE = 0x06;
  • 完整的 128 bit UUID 列表: TYPE = 0x07;

如果需要其他位的UUID自己去试验,欢迎把实验结果告诉我,不扯太多,还是扯代码:

private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
               final ScanRecordUtil scanRecordUtil = ScanRecordUtil.parseFromBytes(scanRecord);
               Logger.e(TAG, "scanRecordUtil" + scanRecordUtil.getUuids16S());
              }
    };

这是我实验的扫描函数


接下来是ScanRecordUtil这个类,这个类主要用来处理广播包的数据

/**
 * 我只把我能用的写了出来,没用的我没看懂
 */
public class ScanRecordUtil {

    private static final String TAG = "---ScanRecordUtil";
    private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03;
    private static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09;
    // Flags of the advertising data.
    private final int mAdvertiseFlags;
    // Transmission power level(in dB).
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值