QNearFieldManager Class
The QNearFieldManager class provides access to notifications for NFC events. More...
Header: | #include <QNearFieldManager> |
qmake: | QT += nfc |
Since: | Qt 5.2 |
Inherits: | QObject. |
Public Types
enum | TargetAccessMode { NoTargetAccess, NdefReadTargetAccess, NdefWriteTargetAccess, TagTypeSpecificTargetAccess } |
flags | TargetAccessModes |
Public Functions
QNearFieldManager(QObject * parent = 0) | |
~QNearFieldManager() | |
bool | isAvailable() const |
int | registerNdefMessageHandler(QObject * object, const char * method) |
int | registerNdefMessageHandler(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray & type, QObject * object, const char * method) |
int | registerNdefMessageHandler(const QNdefFilter & filter, QObject * object, const char * method) |
void | setTargetAccessModes(TargetAccessModes accessModes) |
bool | startTargetDetection() |
void | stopTargetDetection() |
TargetAccessModes | targetAccessModes() const |
bool | unregisterNdefMessageHandler(int handlerId) |
- 31 public functions inherited from QObject
Signals
void | targetDetected(QNearFieldTarget * target) |
void | targetLost(QNearFieldTarget * target) |
- 2 signals inherited from QObject
Additional Inherited Members
- 1 property inherited from QObject
- 1 public slot inherited from QObject
- 11 static public members inherited from QObject
- 9 protected functions inherited from QObject
Detailed Description
The QNearFieldManager class provides access to notifications for NFC events.
NFC Forum devices support two modes of communications. The first mode, peer-to-peer communications, is used to communicate between two NFC Forum devices. The second mode, master/slave communications, is used to communicate between an NFC Forum device and an NFC Forum Tag or Contactless Card. The targetDetected() signal is emitted when a target device enters communications range. Communications can be initiated from the slot connected to this signal.
NFC Forum devices generally operate as the master in master/slave communications. Some devices are also capable of operating as the slave, so called Card Emulation mode. In this mode the local NFC device emulates a NFC Forum Tag or Contactless Card.
NFC Forum Tags can contain one or more messages in a standardized format. These messages are encapsulated by the QNdefMessage class. Use the registerNdefMessageHandler() functions to register message handlers with particular criteria. Handlers can be unregistered with the unregisterNdefMessageHandler() function.
Applications can connect to the targetDetected() and targetLost() signals to get notified when an NFC Forum Tag enters or leaves proximity. Before these signals are emitted target detection must be started with the startTargetDetection() function. Target detection can be stopped with the stopTargetDetection() function. Before a detected target can be accessed it is necessary to request access rights. This must be done before the target device is touched. The setTargetAccessModes() function is used to set the types of access the application wants to perform on the detected target. When access is no longer required the target access modes should be set to NoTargetAccess as other applications may be blocked from accessing targets. The current target access modes can be retried with the targetAccessModes() function.
Automatically launching NDEF message handlers
On some platforms it is possible to pre-register an application to receive NDEF messages matching a given criteria. This is useful to get the system to automatically launch your application when a matching NDEF message is received. This removes the need to have the user manually launch NDEF handling applications, prior to touching a tag, or to have those applications always running and using system resources.
The process of registering the handler is different for each platform. Please refer to the platform documentation on how such a registration may be done. If the application has been registered as an NDEF message handler, the application only needs to call the registerNdefMessageHandler() function:
QNearFieldManager *manager = new QNearFieldManager(this); manager->registerNdefMessageHandler(this, SLOT(handleNdefMessage(QNdefMessage,QNearFieldTarget*)));
On BlackBerry the registration for NDEF message handlers is done over the Invocation Framework. This means that the application has to set an invoke target in the bar descriptor xml file when using registerNdefMessageHandler().
<invoke-target id="com.myapp.id"> <type>APPLICATION</type> <filter> <action>bb.action.OPEN</action> <mime-type>application/vnd.rim.nfc.ndef</mime-type> </filter> </invoke-target>
Member Type Documentation
enum QNearFieldManager::TargetAccessMode
flags QNearFieldManager::TargetAccessModes
This enum describes the different access modes an application can have.
Constant | Value | Description |
---|---|---|
QNearFieldManager::NoTargetAccess | 0x00 | The application cannot access NFC capabilities. |
QNearFieldManager::NdefReadTargetAccess | 0x01 | The application can read NDEF messages from targets by calling QNearFieldTarget::readNdefMessages(). |
QNearFieldManager::NdefWriteTargetAccess | 0x02 | The application can write NDEF messages to targets by calling QNearFieldTarget::writeNdefMessages(). |
QNearFieldManager::TagTypeSpecificTargetAccess | 0x04 | The application can access targets using raw commands by calling QNearFieldTarget::sendCommand(). |
The TargetAccessModes type is a typedef for QFlags<TargetAccessMode>. It stores an OR combination of TargetAccessMode values.
Member Function Documentation
QNearFieldManager::QNearFieldManager(QObject * parent = 0)
Constructs a new near field manager with parent.
QNearFieldManager::~QNearFieldManager()
Destroys the near field manager.
bool QNearFieldManager::isAvailable() const
Returns true if NFC functionality is available; otherwise returns false.
int QNearFieldManager::registerNdefMessageHandler(QObject * object, const char * method)
Registers object to receive notifications on method when a tag has been detected and has an NDEF message that matches a pre-registered message format. The method on object should have the prototype 'void targetDetected(const QNdefMessage &message, QNearFieldTarget *target)'.
Returns an identifier, which can be used to unregister the handler, on success; otherwise returns -1.
This function is used to register a QNearFieldManager instance to receive notifications when a NDEF message matching a pre-registered message format is received. See the section on Automatically launching NDEF message handlers.
Note: The target parameter of method may not be available on all platforms, in which case target will be 0.
int QNearFieldManager::registerNdefMessageHandler(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray & type, QObject * object, const char * method)
Registers object to receive notifications on method when a tag has been detected and has an NDEF record that matches typeNameFormat and type. The method on object should have the prototype 'void targetDetected(const QNdefMessage &message, QNearFieldTarget *target)'.
Returns an identifier, which can be used to unregister the handler, on success; otherwise returns -1.
Note: The target parameter of method may not be available on all platforms, in which case target will be 0.
int QNearFieldManager::registerNdefMessageHandler(const QNdefFilter & filter, QObject * object, const char * method)
Registers object to receive notifications on method when a tag has been detected and has an NDEF message that matches filter is detected. The method on object should have the prototype 'void targetDetected(const QNdefMessage &message, QNearFieldTarget *target)'.
Returns an identifier, which can be used to unregister the handler, on success; otherwise returns -1.
Note: The target parameter of method may not be available on all platforms, in which case target will be 0.
void QNearFieldManager::setTargetAccessModes(TargetAccessModes accessModes)
Sets the requested target access modes to accessModes.
See also targetAccessModes().
bool QNearFieldManager::startTargetDetection()
Starts detecting targets and returns true if target detection is successfully started; otherwise returns false. Causes the targetDetected() signal to be emitted when a target is within proximity.
See also stopTargetDetection().
void QNearFieldManager::stopTargetDetection()
Stops detecting targets. The targetDetected() signal will no longer be emitted until another call to startTargetDetection() is made.
TargetAccessModes QNearFieldManager::targetAccessModes() const
Returns current requested target access modes.
See also setTargetAccessModes().
[signal]
void QNearFieldManager::targetDetected(QNearFieldTarget * target)
This signal is emitted whenever a target is detected. The target parameter represents the detected target.
This signal will be emitted for all detected targets.
QNearFieldManager maintains ownership of target, however, it will not be destroyed until the QNearFieldManager destructor is called. Ownership may be transferred by calling setParent().
Do not delete target from the slot connected to this signal, instead call deleteLater().
Note: that if target is deleted before it moves out of proximity the targetLost() signal will not be emitted.
See also targetLost().
[signal]
void QNearFieldManager::targetLost(QNearFieldTarget * target)
This signal is emitted whenever a target moves out of proximity. The target parameter represents the lost target.
Do not delete target from the slot connected to this signal, instead use deleteLater().
See also QNearFieldTarget::disconnected().
bool QNearFieldManager::unregisterNdefMessageHandler(int handlerId)
Unregisters the target detect handler identified by handlerId.
Returns true on success; otherwise returns false.
© 2015 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.