diff options
author | Alex Blasche <alexander.blasche@theqtcompany.com> | 2014-12-08 11:19:16 +0100 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2014-12-10 12:47:40 +0100 |
commit | 026714701477706231298e92878286930baf3948 (patch) | |
tree | 6a2cd84e6d91dbf9efdd8f26884357ac0a931d94 /examples/nfc/annotatedurl/annotatedurl.cpp | |
parent | 994934b36bcfa74da8975ec31da528ddded50e16 (diff) |
Enable automatic tag polling if message handler is not supported.
All examples have used message handler registration so far. That's
not always supported on all platforms. Neard is one of those
platforms against which this this was verified.
This patch converts some examples to use manual target detection
if handler registration fails.
Change-Id: Icfd8b7c695e63351a45b867fd69e9fc5fefb9360
Reviewed-by: Martin Leutelt <martin.leutelt@basyskom.com>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'examples/nfc/annotatedurl/annotatedurl.cpp')
-rw-r--r-- | examples/nfc/annotatedurl/annotatedurl.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/nfc/annotatedurl/annotatedurl.cpp b/examples/nfc/annotatedurl/annotatedurl.cpp index f29045b6..909f199b 100644 --- a/examples/nfc/annotatedurl/annotatedurl.cpp +++ b/examples/nfc/annotatedurl/annotatedurl.cpp @@ -40,6 +40,7 @@ #include "annotatedurl.h" +#include <qnearfieldmanager.h> #include <qnearfieldtarget.h> #include <qndefmessage.h> #include <qndefrecord.h> @@ -53,14 +54,61 @@ #include <QLabel> #include <QMouseEvent> #include <QDesktopServices> +#include <QDebug> AnnotatedUrl::AnnotatedUrl(QObject *parent) : QObject(parent) { + //! [QNearFieldManager register handler] + manager = new QNearFieldManager(this); + if (!manager->isAvailable()) { + qWarning() << "NFC not available"; + return; + } + + QNdefFilter filter; + filter.setOrderMatch(false); + filter.appendRecord<QNdefNfcTextRecord>(1, UINT_MAX); + filter.appendRecord<QNdefNfcUriRecord>(); + int result = manager->registerNdefMessageHandler(filter, this, + SLOT(handleMessage(QNdefMessage,QNearFieldTarget*))); + //! [QNearFieldManager register handler] + + if (result != -1) + return; + + manager->startTargetDetection(); + connect(manager, SIGNAL(targetDetected(QNearFieldTarget*)), + this, SLOT(targetDetected(QNearFieldTarget*))); + connect(manager, SIGNAL(targetLost(QNearFieldTarget*)), + this, SLOT(targetLost(QNearFieldTarget*))); } AnnotatedUrl::~AnnotatedUrl() { + +} + +void AnnotatedUrl::targetDetected(QNearFieldTarget *target) +{ + if (!target) + return; + + connect(target, SIGNAL(ndefMessageRead(QNdefMessage)), + this, SLOT(handlePolledNdefMessage(QNdefMessage))); + target->readNdefMessages(); +} + +void AnnotatedUrl::targetLost(QNearFieldTarget *target) +{ + if (target) + target->deleteLater(); +} + +void AnnotatedUrl::handlePolledNdefMessage(QNdefMessage message) +{ + QNearFieldTarget *target = qobject_cast<QNearFieldTarget *>(sender()); + handleMessage(message, target); } //! [handleMessage 1] |