diff options
author | Alex Blasche <alexander.blasche@theqtcompany.com> | 2014-11-20 15:34:03 +0100 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@theqtcompany.com> | 2014-11-21 12:46:16 +0100 |
commit | 5d405d07fb51502d0bfab08f4d74aa5eba365bab (patch) | |
tree | 3b2a2f65fde2f5417d5ef4cf5abf99f8aa2ac21a | |
parent | 839b05ba89134ccc4c4cc7716d18995a4c31b534 (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.cpp | 24 |
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", |