Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qnearfieldmanager_android.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 Centria research and development
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"qnearfieldmanager_android_p.h"
5
6
#
include
"qndefmessage.h"
7
#
include
"qbytearray.h"
8
#
include
"qcoreapplication.h"
9
10
#
include
<
QtCore
/
QMetaType
>
11
12
QT_BEGIN_NAMESPACE
13
14
extern
"C"
15
{
16
JNIEXPORT
void
JNICALL Java_org_qtproject_qt_android_nfc_QtNfcBroadcastReceiver_jniOnReceive(
17
JNIEnv *
/*env*/
, jobject
/*javaObject*/
, jlong qtObject, jint state)
18
{
19
QNearFieldManager::AdapterState adapterState =
20
static_cast
<QNearFieldManager::AdapterState>(state);
21
auto
obj =
reinterpret_cast
<QNearFieldManagerPrivateImpl *>(qtObject);
22
Q_ASSERT(obj !=
nullptr
);
23
obj->adapterStateChanged(adapterState);
24
}
25
}
26
27
Q_GLOBAL_STATIC(
QMainNfcNewIntentListener
, newIntentListener)
28
29
QNearFieldManagerPrivateImpl::QNearFieldManagerPrivateImpl() :
30
detecting(
false
)
31
{
32
qRegisterMetaType<QJniObject>(
"QJniObject"
);
33
qRegisterMetaType<QNdefMessage>(
"QNdefMessage"
);
34
35
broadcastReceiver = QJniObject::construct<QtJniTypes::QtNfcBroadcastReceiver>(
36
reinterpret_cast
<jlong>(
this
), QNativeInterface::QAndroidApplication::context());
37
}
38
39
QNearFieldManagerPrivateImpl
::~
QNearFieldManagerPrivateImpl
()
40
{
41
broadcastReceiver.callMethod<
void
>(
"unregisterReceiver"
);
42
}
43
44
void
QNearFieldManagerPrivateImpl
::onTargetDetected(
QNearFieldTargetPrivateImpl
*target)
45
{
46
if
(target->q_ptr) {
47
Q_EMIT targetDetected(target->q_ptr);
48
return
;
49
}
50
51
Q_EMIT targetDetected(
new
QNearFieldTarget(target,
this
));
52
}
53
54
void
QNearFieldManagerPrivateImpl
::onTargetLost(
QNearFieldTargetPrivateImpl
*target)
55
{
56
Q_EMIT targetLost(target->q_ptr);
57
}
58
59
bool
QNearFieldManagerPrivateImpl
::
isEnabled
()
const
60
{
61
return
QtNfc
::
isEnabled
(
)
;
62
}
63
64
bool
QNearFieldManagerPrivateImpl
::
isSupported
(QNearFieldTarget::AccessMethod accessMethod)
const
65
{
66
if
(accessMethod == QNearFieldTarget::UnknownAccess)
67
return
false
;
68
69
return
QtNfc
::
isSupported
(
)
;
70
}
71
72
bool
QNearFieldManagerPrivateImpl
::
startTargetDetection
(QNearFieldTarget::AccessMethod accessMethod)
73
{
74
if
(detecting)
75
return
false
;
// Already detecting targets
76
77
if
(newIntentListener.isDestroyed())
78
return
false
;
79
80
detecting =
true
;
81
requestedMethod = accessMethod;
82
newIntentListener->registerListener(
this
);
83
return
true
;
84
}
85
86
void
QNearFieldManagerPrivateImpl
::stopTargetDetection(
const
QString &)
87
{
88
detecting =
false
;
89
if
(newIntentListener.exists())
90
newIntentListener->unregisterListener(
this
);
91
Q_EMIT targetDetectionStopped();
92
}
93
94
void
QNearFieldManagerPrivateImpl
::
newIntent
(QJniObject intent)
95
{
96
// This function is called from different thread and is used to move intent to main thread.
97
QMetaObject::invokeMethod(
this
, [
this
, intent] {
98
this
->onTargetDiscovered(intent);
99
}, Qt::QueuedConnection);
100
}
101
102
QByteArray
QNearFieldManagerPrivateImpl
::
getUid
(
const
QJniObject &intent)
103
{
104
if
(!intent.isValid())
105
return
QByteArray();
106
107
QJniObject tag = QtNfc::getTag(intent);
108
if
(!tag.isValid())
109
return
QByteArray();
110
111
return
tag.callMethod<jbyte[]>(
"getId"
).toContainer();
112
}
113
114
void
QNearFieldManagerPrivateImpl
::onTargetDiscovered(QJniObject intent)
115
{
116
// Getting UID
117
QByteArray
uid = getUid(intent);
118
119
// Accepting all targets but only sending signal of requested types.
120
QNearFieldTargetPrivateImpl
*&target = detectedTargets[uid];
121
if
(target) {
122
target->setIntent(intent);
// Updating existing target
123
}
else
{
124
target =
new
QNearFieldTargetPrivateImpl
(intent, uid);
125
126
if
(target->accessMethods() & requestedMethod) {
127
connect(target, &QNearFieldTargetPrivateImpl::targetDestroyed,
this
, &
QNearFieldManagerPrivateImpl
::onTargetDestroyed);
128
connect(target, &
QNearFieldTargetPrivateImpl
::
targetLost
,
this
, &
QNearFieldManagerPrivateImpl
::onTargetLost);
129
onTargetDetected(target);
130
}
else
{
131
delete
target;
132
detectedTargets.remove(uid);
133
}
134
}
135
}
136
137
void
QNearFieldManagerPrivateImpl
::onTargetDestroyed(
const
QByteArray
&uid)
138
{
139
detectedTargets.remove(uid);
140
}
141
142
QT_END_NAMESPACE
QByteArray::FromBase64Result
\inmodule QtCore
Definition
qbytearray.h:824
QMainNfcNewIntentListener
Definition
androidmainnewintentlistener_p.h:36
QNearFieldManagerPrivateImpl
Definition
qnearfieldmanager_ios_p.h:36
QNearFieldManagerPrivateImpl::isEnabled
bool isEnabled() const override
Definition
qnearfieldmanager_ios_p.h:43
QNearFieldManagerPrivateImpl::getUid
QByteArray getUid(const QJniObject &intent)
Definition
qnearfieldmanager_android.cpp:102
QNearFieldManagerPrivateImpl::isSupported
bool isSupported(QNearFieldTarget::AccessMethod accessMethod) const override
Definition
qnearfieldmanager_android.cpp:64
QNearFieldManagerPrivateImpl::startTargetDetection
bool startTargetDetection(QNearFieldTarget::AccessMethod accessMethod) override
Definition
qnearfieldmanager_android.cpp:72
QNearFieldManagerPrivateImpl::newIntent
void newIntent(QJniObject intent) override
Definition
qnearfieldmanager_android.cpp:94
QNearFieldManagerPrivateImpl::~QNearFieldManagerPrivateImpl
~QNearFieldManagerPrivateImpl()
Definition
qnearfieldmanager_android.cpp:39
QNearFieldTargetPrivateImpl
Definition
qnearfieldtarget_ios_p.h:61
QNearFieldTargetPrivateImpl::targetLost
void targetLost(QNearFieldTargetPrivateImpl *target)
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtNfc
Definition
androidjninfc.cpp:11
QtNfc::isEnabled
bool isEnabled()
Definition
androidjninfc.cpp:18
QtNfc::isSupported
bool isSupported()
Definition
androidjninfc.cpp:23
qtconnectivity
src
nfc
qnearfieldmanager_android.cpp
Generated on
for Qt by
1.18.0