同厂商BLE锁在Android系统中的MAC地址是否相同?
关于BLE锁MAC地址与设备扫描过滤的解答
首先明确说:同厂商的每台BLE锁MAC地址都是独一无二的,不会有重复的情况。
原因很简单:BLE设备的MAC地址遵循IEEE全球统一分配规则——前3个字节是厂商的OUI(组织唯一标识符,比如你这台锁的88:5B:0F就是该厂商的专属OUI),后3个字节是厂商给每台设备分配的唯一序列号。所以哪怕是同品牌同型号的BLE锁,MAC地址也会不一样,毕竟MAC的核心作用就是在蓝牙网络里唯一标识一台设备。
那你想仅扫描特定类型的BLE锁(同厂商的这类设备),靠MAC地址肯定行不通,因为每台都不一样。给你几个更靠谱的方案:
- 过滤BLE服务UUID:厂商通常会给自家的BLE锁定义一个专属的GATT服务UUID,你可以在扫描时设置
ScanFilter,只匹配带有这个UUID的设备。这是最常用也最可靠的方式,因为服务UUID是设备功能的标识,不会轻易变动。 - 解析广播包中的制造商特定数据:很多厂商会在BLE广播包中加入自定义的制造商数据段,里面会包含设备类型、型号等信息。你可以扫描时解析广播数据,匹配这个特定的制造商数据来过滤目标设备。
- 匹配设备名称前缀:如果厂商给所有BLE锁设置了统一的名称格式(比如
MyLock-XXXX),也可以通过过滤设备名称的前缀来筛选,但这个方式可靠性稍差,因为设备名称是可以被修改的。
给你一个Android端扫描时过滤服务UUID的代码示例,方便你参考:
// 假设你的厂商BLE锁的服务UUID是"0000FFE0-0000-1000-8000-00805F9B34FB" ScanFilter lockFilter = new ScanFilter.Builder() .setServiceUuid(ParcelUuid.fromString("0000FFE0-0000-1000-8000-00805F9B34FB")) .build(); ScanSettings scanSettings = new ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .build(); // 启动扫描,只返回匹配过滤规则的设备 bluetoothLeScanner.startScan(Collections.singletonList(lockFilter), scanSettings, yourScanCallback);
内容的提问来源于stack exchange,提问作者Nirmal Prajapat
相关产品推荐
相关产品推荐

