67
The NearField type was introduced in \b {QtNfc 5.0}.
69
68
The NearField type can be used to read NDEF messages from NFC Forum tags. Set the \l filter
70
69
and \l orderMatch properties to match the required NDEF messages. Once an NDEF message is
71
70
successfully read from a tag the \l messageRecords property is updated.
75
filter: [ NdefFilter { type: "urn:nfc:wkt:U"; minimum: 1; maximum: 1 } ]
74
filter: [ NdefFilter { type: "U"; typeNameFormat: NdefRecord.NfcRtd; minimum: 1; maximum: 1 } ]
78
77
onMessageRecordsChanged: displayMessage()
90
89
\qmlproperty list<NdefFilter> NearField::filter
92
91
This property holds the NDEF filter constraints. The \l messageRecords property will only be
93
set to NDEF messages which match the filter.
92
set to NDEF messages which match the filter. If no filter is set, a message handler for
93
all NDEF messages will be registered.
95
\l QNearFieldManager::registerNdefMessageHandler()
109
QQmlListProperty<QDeclarativeNdefRecord> QDeclarativeNearField::messageRecords()
111
QQmlListProperty<QQmlNdefRecord> QDeclarativeNearField::messageRecords()
111
return QQmlListProperty<QDeclarativeNdefRecord>(this, 0,
113
return QQmlListProperty<QQmlNdefRecord>(this, 0,
112
114
&QDeclarativeNearField::append_messageRecord,
113
115
&QDeclarativeNearField::count_messageRecords,
114
116
&QDeclarativeNearField::at_messageRecord,
155
156
if (m_messageHandlerId != -1)
156
157
m_manager->unregisterNdefMessageHandler(m_messageHandlerId);
159
if (m_filter.isEmpty())
163
filter.setOrderMatch(m_orderMatch);
164
foreach (QDeclarativeNdefFilter *f, m_filter) {
165
const QString type = f->type();
166
uint min = f->minimum() < 0 ? UINT_MAX : f->minimum();
167
uint max = f->maximum() < 0 ? UINT_MAX : f->maximum();
169
if (type.startsWith(QLatin1String("urn:nfc:wkt:")))
170
filter.appendRecord(QNdefRecord::NfcRtd, type.mid(12).toUtf8(), min, max);
171
else if (type.startsWith(QLatin1String("urn:nfc:ext:")))
172
filter.appendRecord(QNdefRecord::ExternalRtd, type.mid(12).toUtf8(), min, max);
173
else if (type.startsWith(QLatin1String("urn:nfc:mime")))
174
filter.appendRecord(QNdefRecord::Mime, type.mid(13).toUtf8(), min, max);
176
qWarning("Unknown NDEF record type %s", qPrintable(type));
159
QNdefFilter ndefFilter;
160
ndefFilter.setOrderMatch(m_orderMatch);
161
foreach (const QDeclarativeNdefFilter *filter, m_filterList) {
162
const QString type = filter->type();
163
uint min = filter->minimum() < 0 ? UINT_MAX : filter->minimum();
164
uint max = filter->maximum() < 0 ? UINT_MAX : filter->maximum();
166
ndefFilter.appendRecord(static_cast<QNdefRecord::TypeNameFormat>(filter->typeNameFormat()), type.toUtf8(), min, max);
179
m_messageHandlerId = m_manager->registerNdefMessageHandler(filter, this, SLOT(_q_handleNdefMessage(QNdefMessage)));
169
m_messageHandlerId = m_manager->registerNdefMessageHandler(ndefFilter, this, SLOT(_q_handleNdefMessage(QNdefMessage)));
182
172
void QDeclarativeNearField::_q_handleNdefMessage(const QNdefMessage &message)
195
185
emit messageRecordsChanged();
198
void QDeclarativeNearField::append_messageRecord(QQmlListProperty<QDeclarativeNdefRecord> *list,
199
QDeclarativeNdefRecord *record)
188
void QDeclarativeNearField::append_messageRecord(QQmlListProperty<QQmlNdefRecord> *list,
189
QQmlNdefRecord *record)
201
191
QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
208
198
emit nearField->messageRecordsChanged();
211
int QDeclarativeNearField::count_messageRecords(QQmlListProperty<QDeclarativeNdefRecord> *list)
201
int QDeclarativeNearField::count_messageRecords(QQmlListProperty<QQmlNdefRecord> *list)
213
203
QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
217
207
return nearField->m_message.count();
220
QDeclarativeNdefRecord *QDeclarativeNearField::at_messageRecord(QQmlListProperty<QDeclarativeNdefRecord> *list,
210
QQmlNdefRecord *QDeclarativeNearField::at_messageRecord(QQmlListProperty<QQmlNdefRecord> *list,
223
213
QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
227
217
return nearField->m_message.at(index);
230
void QDeclarativeNearField::clear_messageRecords(QQmlListProperty<QDeclarativeNdefRecord> *list)
220
void QDeclarativeNearField::clear_messageRecords(QQmlListProperty<QQmlNdefRecord> *list)
232
222
QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
248
238
filter->setParent(nearField);
249
nearField->m_filter.append(filter);
239
nearField->m_filterList.append(filter);
250
240
emit nearField->filterChanged();
252
242
if (nearField->m_componentCompleted)
281
qDeleteAll(nearField->m_filter);
282
nearField->m_filter.clear();
271
qDeleteAll(nearField->m_filterList);
272
nearField->m_filterList.clear();
283
273
emit nearField->filterChanged();
284
274
if (nearField->m_componentCompleted)
285
275
nearField->registerMessageHandler();