Add service-data in advertisements (#207)

* Add service-data in advertisements

* Fix windows serviceData parsing

* Resolve Ai comments

* Resolve Ai comments and validate service data

* Cleanup and Update changelog
This commit is contained in:
Rohit Sangwan
2026-01-21 13:43:36 +05:30
committed by GitHub
parent 1334057a8a
commit dae2f5dc4d
18 changed files with 268 additions and 37 deletions
@@ -174,6 +174,7 @@ data class UniversalBleScanResult (
val isPaired: Boolean? = null,
val rssi: Long? = null,
val manufacturerDataList: List<UniversalManufacturerData>? = null,
val serviceData: Map<String, ByteArray>? = null,
val services: List<String>? = null,
val timestamp: Long? = null
)
@@ -185,9 +186,10 @@ data class UniversalBleScanResult (
val isPaired = pigeonVar_list[2] as Boolean?
val rssi = pigeonVar_list[3] as Long?
val manufacturerDataList = pigeonVar_list[4] as List<UniversalManufacturerData>?
val services = pigeonVar_list[5] as List<String>?
val timestamp = pigeonVar_list[6] as Long?
return UniversalBleScanResult(deviceId, name, isPaired, rssi, manufacturerDataList, services, timestamp)
val serviceData = pigeonVar_list[5] as Map<String, ByteArray>?
val services = pigeonVar_list[6] as List<String>?
val timestamp = pigeonVar_list[7] as Long?
return UniversalBleScanResult(deviceId, name, isPaired, rssi, manufacturerDataList, serviceData, services, timestamp)
}
}
fun toList(): List<Any?> {
@@ -197,6 +199,7 @@ data class UniversalBleScanResult (
isPaired,
rssi,
manufacturerDataList,
serviceData,
services,
timestamp,
)
@@ -133,6 +133,11 @@ val ScanResult.manufacturerDataList: List<UniversalManufacturerData>
} ?: emptyList()
}
val ScanResult.serviceData: Map<String, ByteArray>
get() {
return scanRecord?.serviceData?.mapKeys { it.key.uuid.toString() } ?: emptyMap()
}
fun <T> SparseArray<T>.toList(): List<Pair<Int, T>> {
return (0 until size).map { index ->
keyAt(index) to valueAt(index)
@@ -844,6 +844,7 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
deviceId = it.address,
isPaired = it.bondState == BOND_BONDED,
manufacturerDataList = null,
serviceData = null,
rssi = null,
timestamp = System.currentTimeMillis()
)
@@ -1100,6 +1101,7 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
val name = result.device.name
val manufacturerDataList = result.manufacturerDataList
val serviceData = result.serviceData
if (!universalBleFilterUtil.filterDevice(
name,
@@ -1116,6 +1118,7 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
deviceId = result.device.address,
isPaired = result.device.bondState == BOND_BONDED,
manufacturerDataList = manufacturerDataList,
serviceData = serviceData,
rssi = result.rssi.toLong(),
services = serviceUuids.map { it.toString() }.toList(),
timestamp = System.currentTimeMillis()