The BeaconParser class parses the advertising data that is sent by BLE beacons.
It supports iBeacons, Eddystone UID and Eddystone URL formats.
Note that this class is also compatible with B4i. However it will not detect iBeacons due to the way those beacons are handled in iOS.
You do not need to connect to the beacon. All the important information is delivered in the advertising data.
Call BleManager2.Scan2(Null, True) to start scanning. The second parameter (AllowDuplicates) means that it will "find" the same devices again and again.
B4A example:
B4i example:
The distance is not accurate enough to be useful.
The main method of BeaconParser is Parse. You should call it from the DeviceFound sub:
New version of BeaconParser was uploaded. It requires BLE v1.20+: https://www.b4x.com/android/forum/threads/ble-2-bluetooth-low-energy.59937/#post-377705
It fixes an issue when there are multiple records with the same type.
It supports iBeacons, Eddystone UID and Eddystone URL formats.
Note that this class is also compatible with B4i. However it will not detect iBeacons due to the way those beacons are handled in iOS.
You do not need to connect to the beacon. All the important information is delivered in the advertising data.
Call BleManager2.Scan2(Null, True) to start scanning. The second parameter (AllowDuplicates) means that it will "find" the same devices again and again.
B4A example:
B4i example:
The distance is not accurate enough to be useful.
The main method of BeaconParser is Parse. You should call it from the DeviceFound sub:
B4X:
Sub Manager_DeviceFound (Name As String, Id As String, AdvertisingData As Map, RSSI As Double)
Dim beacon1 As Beacon = Parser.Parse(AdvertisingData, RSSI)
If beacon1 <> Null Then
'a beacon was discovered.
'find the beacon type based on the BeaconType field.
Select beacon1.BeaconType
Case Parser.TypeiBeacon
Dim ib As iBeacon = beacon1.SpecificData
Log($"iBeacon: ${ib.uuid} (${ib.major}/${ib.minor})"$)
Case Parser.TypeEddystoneUID
Dim euid As EddystoneUID = beacon1.SpecificData
lLog($"Eddystone UID: ${euid.Namespace}:${euid.Instance}"$)
Case Parser.TypeEddystoneURL
Dim eurl As EddystoneURL = beacon1.SpecificData
Log($"Eddystone URL: ${eurl.url}"$)
End Select
End If
End Sub
New version of BeaconParser was uploaded. It requires BLE v1.20+: https://www.b4x.com/android/forum/threads/ble-2-bluetooth-low-energy.59937/#post-377705
It fixes an issue when there are multiple records with the same type.
Attachments
Last edited: