blob: a708035f61c5c2e9785ccd284f9c4fcbfa37bda3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "android/servicediscoverybroadcastreceiver_p.h"
#include <QCoreApplication>
#include <QtCore/QLoggingCategory>
#include <QtCore/QJniEnvironment>
#include <QtBluetooth/QBluetoothAddress>
#include <QtBluetooth/QBluetoothDeviceInfo>
#include "android/jni_android_p.h"
QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
ServiceDiscoveryBroadcastReceiver::ServiceDiscoveryBroadcastReceiver(QObject* parent): AndroidBroadcastReceiver(parent)
{
addAction(QJniObject::fromString(
valueForStaticField<QtJniTypes::BluetoothDevice, JavaNames::ActionUuid>()));
}
void ServiceDiscoveryBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobject intent)
{
Q_UNUSED(context);
Q_UNUSED(env);
QJniObject intentObject(intent);
const QString action = intentObject.callMethod<jstring>("getAction").toString();
qCDebug(QT_BT_ANDROID) << "ServiceDiscoveryBroadcastReceiver::onReceive() - event:" << action;
if (action == valueForStaticField<QtJniTypes::BluetoothDevice, JavaNames::ActionUuid>()) {
QJniObject keyExtra = QJniObject::fromString(
valueForStaticField<QtJniTypes::BluetoothDevice, JavaNames::ExtraUuid>());
QJniObject parcelableUuids = intentObject.callMethod<QtJniTypes::ParcelableArray>(
"getParcelableArrayExtra",
keyExtra.object<jstring>());
if (!parcelableUuids.isValid()) {
emit uuidFetchFinished(QBluetoothAddress(), QList<QBluetoothUuid>());
return;
}
const QList<QBluetoothUuid> result = ServiceDiscoveryBroadcastReceiver::convertParcelableArray(parcelableUuids);
keyExtra = QJniObject::fromString(
valueForStaticField<QtJniTypes::BluetoothDevice, JavaNames::ExtraDevice>());
QJniObject bluetoothDevice =
intentObject.callMethod<QtJniTypes::Parcelable>("getParcelableExtra",
keyExtra.object<jstring>());
QBluetoothAddress address;
if (bluetoothDevice.isValid()) {
address =
QBluetoothAddress(bluetoothDevice.callMethod<jstring>("getAddress").toString());
emit uuidFetchFinished(address, result);
} else {
emit uuidFetchFinished(QBluetoothAddress(), QList<QBluetoothUuid>());
}
}
}
QList<QBluetoothUuid> ServiceDiscoveryBroadcastReceiver::convertParcelableArray(const QJniObject &parcelUuidArray)
{
QList<QBluetoothUuid> result;
QJniEnvironment env;
jobjectArray parcels = parcelUuidArray.object<jobjectArray>();
if (!parcels)
return result;
jint size = env->GetArrayLength(parcels);
for (jint i = 0; i < size; ++i) {
auto p = QJniObject::fromLocalRef(env->GetObjectArrayElement(parcels, i));
QBluetoothUuid uuid(p.callMethod<jstring>("toString").toString());
//qCDebug(QT_BT_ANDROID) << uuid.toString();
result.append(uuid);
}
return result;
}
QT_END_NAMESPACE
|