summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@theqtcompany.com>2014-11-20 15:34:03 +0100
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>2014-11-21 12:46:16 +0100
commit5d405d07fb51502d0bfab08f4d74aa5eba365bab (patch)
tree3b2a2f65fde2f5417d5ef4cf5abf99f8aa2ac21a
parent839b05ba89134ccc4c4cc7716d18995a4c31b534 (diff)
Fix crash during service discovery on Androidv5.4.0
This is caused when running a service discovery on an Android emulator. The emulator does not have a local Bluetooth device despite the Qt code assuming it. Change-Id: I9c0d826d14e7494bfeb27d449f9b6f568860d917 Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com> Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_android.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
index 01993f25..e10d2ffe 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
@@ -48,19 +48,20 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
- const QBluetoothAddress &deviceAdapter)
+ const QBluetoothAddress &/*deviceAdapter*/)
: error(QBluetoothServiceDiscoveryAgent::NoError),
state(Inactive), deviceDiscoveryAgent(0),
mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
singleDevice(false), receiver(0), localDeviceReceiver(0)
{
QList<QBluetoothHostInfo> devices = QBluetoothLocalDevice::allDevices();
- Q_ASSERT(devices.count() == 1); //Android only supports one device at the moment
+ Q_ASSERT(devices.count() <= 1); //Android only supports one device at the moment
- if (deviceAdapter.isNull() && devices.count() > 0 )
- m_deviceAdapterAddress = devices.at(0).address();
- else
- m_deviceAdapterAddress = deviceAdapter;
+ if (devices.isEmpty()) {
+ error = QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError;
+ errorString = QBluetoothServiceDiscoveryAgent::tr("Invalid Bluetooth adapter address");
+ return;
+ }
if (QtAndroidPrivate::androidSdkVersion() < 15)
qCWarning(QT_BT_ANDROID)
@@ -69,13 +70,10 @@ QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
<< "Service discovery will return empty list.";
- /* We assume that the current local adapter has been passed.
- Android only supports one adapter at the moment. If m_deviceAdapterAddress
- doesn't match the local adapter then we won't get to this point since
- we have an InvalidBluetoothAdapter error.
-
- The logic below must change once there is more than one adapter.
- */
+ /*
+ We assume that the current local adapter has been passed.
+ The logic below must change once there is more than one adapter.
+ */
btAdapter = QAndroidJniObject::callStaticObjectMethod("android/bluetooth/BluetoothAdapter",
"getDefaultAdapter",