Не путайте UUID службы Bluetooth с UUID Proximity iBeacon. Они могут выглядеть одинаково, но иметь совершенно разные значения и цели.
Упомянутый вами метод startLeScan
использует необязательный UUID службы для фильтрации сканирования устройств Bluetooth, предлагающих конкретную услугу. Это не сработает для сканирования iBeacons, которые не рекламируют определенные услуги и нуждаются в дополнительном программном обеспечении для декодирования своих полей.
Чтобы отсканировать iBeacons с определенным UUID Proximity и расшифровать их значения, попробуйте Android iBeacon Library который предназначен именно для того, что вы описываете. Настроить фильтр для одного Proximity UUID очень просто:
iBeaconManager.startMonitoringBeaconsInRegion(new Region("myRegion", "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6", null, null));
Полный пример можно увидеть здесь.
Если вы хотите свернуть свою собственную, вам нужно декодировать каждую рекламу bluetooth, возвращенную в BluetoothAdapter.LeScanCallback
, отбросить рекламу, не относящуюся к iBeacon, затем сравнить UUID Proximity UUID каждой рекламы iBeacon с той, которую вы ищете, и игнорировать все, что не соответствует. совпадение. Упомянутая выше библиотека с открытым исходным кодом имеет метод fromScanData
, который декодирует рекламу в поля iBeacon здесь.
person
davidgyoung
schedule
11.06.2014