10#include <QtCore/QMetaType>
16 JNIEXPORT
void JNICALL Java_org_qtproject_qt_android_nfc_QtNfcBroadcastReceiver_jniOnReceive(
17 JNIEnv *, jobject , jlong qtObject, jint state)
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);
29QNearFieldManagerPrivateImpl::QNearFieldManagerPrivateImpl() :
32 qRegisterMetaType<QJniObject>(
"QJniObject");
33 qRegisterMetaType<QNdefMessage>(
"QNdefMessage");
35 broadcastReceiver = QJniObject::construct<QtJniTypes::QtNfcBroadcastReceiver>(
36 reinterpret_cast<jlong>(
this), QNativeInterface::QAndroidApplication::context());
41 broadcastReceiver.callMethod<
void>(
"unregisterReceiver");
47 Q_EMIT targetDetected(target->q_ptr);
51 Q_EMIT targetDetected(
new QNearFieldTarget(target,
this));
56 Q_EMIT targetLost(target->q_ptr);
66 if (accessMethod == QNearFieldTarget::UnknownAccess)
77 if (newIntentListener.isDestroyed())
81 requestedMethod = accessMethod;
82 newIntentListener->registerListener(
this);
89 if (newIntentListener.exists())
90 newIntentListener->unregisterListener(
this);
91 Q_EMIT targetDetectionStopped();
97 QMetaObject::invokeMethod(
this, [
this, intent] {
98 this->onTargetDiscovered(intent);
99 }, Qt::QueuedConnection);
104 if (!intent.isValid())
107 QJniObject tag = QtNfc::getTag(intent);
111 return tag.callMethod<jbyte[]>(
"getId").toContainer();
122 target->setIntent(intent);
126 if (target->accessMethods() & requestedMethod) {
127 connect(target, &QNearFieldTargetPrivateImpl::targetDestroyed,
this, &QNearFieldManagerPrivateImpl::onTargetDestroyed);
129 onTargetDetected(target);
132 detectedTargets.remove(uid);
139 detectedTargets.remove(uid);
bool isEnabled() const override
QByteArray getUid(const QJniObject &intent)
bool isSupported(QNearFieldTarget::AccessMethod accessMethod) const override
bool startTargetDetection(QNearFieldTarget::AccessMethod accessMethod) override
void newIntent(QJniObject intent) override
~QNearFieldManagerPrivateImpl()
void targetLost(QNearFieldTargetPrivateImpl *target)