Устройство с низким энергопотреблением Bluetooth уникально идентифицировано по его адресу (в Android API они называют этот MAC-адрес и обозначают его как шестнадцатеричные значения, разделенные двоеточиями, например 11: aa: 22: bb: 33: cc).
Но для однозначного определения адреса BLE вам нужно знать, является ли он публичным или частным адресом. В сущности, 49 бит необходимы для идентификации адреса, а не 48.
Случайные адреса могут быть либо статическими случайными, неразрешимыми частными, либо разрешаемыми частями, и эти типы разделяются битовой диаграммой в двух наиболее значимых байтах (11, 00 и 10 соответственно).
Но я не вижу нигде, что вы можете отделить общедоступные и случайные адреса, просто взглянув на 48 бит в адресе.
Итак, как это работает в Android API? Как узнать, к какому устройству подключиться, когда они не знают, являются ли указанные вами адреса общедоступными или случайными?
В рассматриваемом API есть функция getRemoteDevice. В нем говорится:
Valid Bluetooth hardware addresses must be upper case, in a format such as
"00:11:22:33:AA:BB". The helper checkBluetoothAddress(String) is available
to validate a Bluetooth address.
A BluetoothDevice will always be returned for a valid hardware address,
even if this adapter has never seen that device.
Таким образом, вы даете функции 48 бит данных, и нет способа сказать, является ли адрес общедоступным или приватным. Это означает, что устройство не идентифицировано однозначно.