diff options
-rw-r--r-- | src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp index d401fa58..e20fa723 100644 --- a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp +++ b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp @@ -221,6 +221,11 @@ void QBluetoothDeviceDiscoveryAgentPrivate::processDiscoveredDevices( Q_Q(QBluetoothDeviceDiscoveryAgent); + // Android Classic scan and LE scan can find the same device under different names + // The classic name finds the SDP based device name, the LE scan finds the name in + // the advertisement package. + // If address is same but name different then we keep both entries. + for (int i = 0; i < discoveredDevices.size(); i++) { if (discoveredDevices[i].address() == info.address()) { if (discoveredDevices[i] == info) { @@ -229,11 +234,13 @@ void QBluetoothDeviceDiscoveryAgentPrivate::processDiscoveredDevices( return; } - // same device found -> avoid duplicates and update core configuration - discoveredDevices[i].setCoreConfigurations(discoveredDevices[i].coreConfigurations() | info.coreConfigurations()); - - emit q->deviceDiscovered(info); - return; + if (discoveredDevices.at(i).name() == info.name()) { + qCDebug(QT_BT_ANDROID) << "Almost Duplicate "<< info.address() + << info.name() << "- replacing in place"; + discoveredDevices.replace(i, info); + emit q->deviceDiscovered(info); + return; + } } } |