Repository navigation
Android SBeacon Framework Beacon Pairing
Aigars Mališevs edited this page Feb 2, 2026
·
5 revisions
SBeacon SDK v1.6.13
This guide covers pairing and unpairing SBeacon devices, connection management, and monitoring connection state.
private fun pairBeacon(beacon: ScopeBeacon, subscriptionId: Int = 0, serialNumber: String = "") {
lifecycleScope.launch(Dispatchers.IO) {
try {
val bleManager = BLEManager.retrieveInstance(requireContext())
// Pair the beacon
bleManager.pairBeacon(beacon, subscriptionId, serialNumber)
Timber.i("Paired beacon: ${beacon.macAddress}")
withContext(Dispatchers.Main) {
Toast.makeText(context, "Beacon paired successfully", Toast.LENGTH_SHORT).show()
}
} catch (e: Exception) {
Timber.e(e, "Failed to pair beacon")
}
}
}| Parameter | Type | Description |
|---|---|---|
beacon |
ScopeBeacon |
The beacon object from scan results |
subscriptionId |
Int |
Optional subscription identifier (use 0 if not applicable) |
serialNumber |
String |
Optional device serial number (use empty string if not applicable) |
private fun unpairBeacon(beacon: ScopeBeacon) {
lifecycleScope.launch(Dispatchers.IO) {
try {
BLEManager.retrieveInstance(requireContext()).unpairBeacon(beacon)
Timber.i("Unpaired beacon: ${beacon.macAddress}")
withContext(Dispatchers.Main) {
Toast.makeText(context, "Beacon unpaired", Toast.LENGTH_SHORT).show()
}
} catch (e: Exception) {
Timber.e(e, "Failed to unpair beacon")
}
}
}val isConnected = BLEManager.retrieveInstance(context).isBeaconConnected(beacon)val hasSingleConnection = BLEManager.retrieveInstance(context).singleBeaconConnection()Subscribe to connection events using IBFHelper.EventsReceiver:
private val beaconEventsReceiver = object : IBFHelper.EventsReceiver() {
override fun onBeaconConnected(mac: String) {
lifecycleScope.launch(Dispatchers.Main) {
updateConnectionStatus(mac, connected = true)
}
}
override fun onBeaconDisconnected(mac: String) {
lifecycleScope.launch(Dispatchers.Main) {
updateConnectionStatus(mac, connected = false)
}
}
override fun onBeaconPaired(name: String) {
Timber.i("Beacon paired: $name")
}
override fun onBeaconUnpaired(name: String) {
Timber.i("Beacon unpaired: $name")
}
}
override fun onResume() {
super.onResume()
IBFHelper.registerEventsReceiver(requireContext(), beaconEventsReceiver)
}
override fun onPause() {
super.onPause()
IBFHelper.unregisterEventsReceiver(requireContext(), beaconEventsReceiver)
}| Event | Description |
|---|---|
MyCarDetected |
Paired SBeacon connected and recognized |
MyCarNotDetected |
Paired SBeacon disconnected |
onBeaconConnected(mac) |
SBeacon connected |
onBeaconDisconnected(mac) |
SBeacon disconnected |
onBeaconPaired(name) |
SBeacon pairing completed |
onBeaconUnpaired(name) |
SBeacon unpairing completed |
The SDK automatically attempts to reconnect to paired beacons. To manually trigger reconnection:
BLEManager.retrieveInstance(context).runAutoConnectionTask()lifecycleScope.launch(Dispatchers.IO) {
BLEManager.retrieveInstance(context).disconnectFromAllBeacons()
}Paired beacons are automatically persisted to local storage using Room database. They remain paired across app restarts:
// Get all stored beacons (paired and unpaired)
val allBeacons = BLEManager.retrieveInstance(context).allBeacons()
// Get only paired beacons
val pairedBeacons = allBeacons.filter { it.paired }Always perform pairing/unpairing operations on IO dispatcher:
lifecycleScope.launch(Dispatchers.IO) {
bleManager.pairBeacon(beacon, subscriptionId, serialNumber)
}Wrap pairing operations in try-catch:
try {
bleManager.pairBeacon(beacon, subscriptionId, serialNumber)
} catch (e: Exception) {
Timber.e(e, "Pairing failed")
// Show error to user
}If your app supports only one paired beacon at a time, unpair existing beacons before pairing a new one:
// Unpair all existing beacons
val existingPaired = bleManager.allBeacons().filter { it.paired }
existingPaired.forEach { bleManager.unpairBeacon(it) }
// Then pair the new beacon
bleManager.pairBeacon(newBeacon, subscriptionId, serialNumber)- Trip Management - Track trips with paired beacons
- Calibration - Calibrate accelerometer for accurate detection
- Driving Behavior - Enable driving behavior detection
Consolidated SDK
SmartDrive
PortalApiBase
PortalApiClient
Wellness
SBeacon
- Overview
- Installation
- Initialization
- Beacon Scanning
- Beacon Pairing
- Trip Management
- Driving Behavior
- Calibration
- Event Handling
- Data Models
- API Reference
Consolidated SPM
SDApiManager
CCFrameworkOpen
SmartDrive
SBeacon