8#define NDEFTECHNOLOGY QStringLiteral("android.nfc.tech.Ndef")
9#define NDEFFORMATABLETECHNOLOGY QStringLiteral("android.nfc.tech.NdefFormatable")
10#define ISODEPTECHNOLOGY QStringLiteral("android.nfc.tech.IsoDep")
11#define NFCATECHNOLOGY QStringLiteral("android.nfc.tech.NfcA")
12#define NFCBTECHNOLOGY QStringLiteral("android.nfc.tech.NfcB")
13#define NFCFTECHNOLOGY QStringLiteral("android.nfc.tech.NfcF")
14#define NFCVTECHNOLOGY QStringLiteral("android.nfc.tech.NfcV")
15#define MIFARECLASSICTECHNOLOGY QStringLiteral("android.nfc.tech.MifareClassic")
16#define MIFARECULTRALIGHTTECHNOLOGY QStringLiteral("android.nfc.tech.MifareUltralight")
18#define MIFARETAG QStringLiteral("com.nxp.ndef.mifareclassic")
19#define NFCTAGTYPE1 QStringLiteral("org.nfcforum.ndef.type1")
20#define NFCTAGTYPE2 QStringLiteral("org.nfcforum.ndef.type2")
21#define NFCTAGTYPE3 QStringLiteral("org.nfcforum.ndef.type3")
22#define NFCTAGTYPE4 QStringLiteral("org.nfcforum.ndef.type4")
75 bool connected =
tagTech.callMethod<jboolean>(
"isConnected");
78 auto methodId = env.findMethod<
void>(
tagTech.objectClass(),
"close");
81 env->CallVoidMethod(
tagTech.object(), methodId);
82 return !env.checkAndClearExceptions();
116 QJniObject ndefMessage =
tagTech.callMethod<QtJniTypes::NdefMessage>(
"getNdefMessage");
117 if (!ndefMessage.isValid()) {
123 QJniObject ndefMessageBA = ndefMessage.callMethod<jbyteArray>(
"toByteArray");
158 return tagTech.callMethod<jint>(
"getMaxTransceiveLength");
188 jbyteArray jba = env->NewByteArray(
ba.
size());
189 env->SetByteArrayRegion(jba, 0,
ba.
size(),
reinterpret_cast<jbyte*
>(
ba.
data()));
193 if (!myNewVal.isValid()) {
204 env->DeleteLocalRef(jba);
217 if (messages.
size() == 0)
220 if (messages.
size() > 1)
221 qWarning(
"QNearFieldTarget::writeNdefMessages: Android supports writing only one NDEF message per tag.");
224 const char *writeMethod;
231 writeMethod =
"format";
233 writeMethod =
"writeNdefMessage";
246 env->SetByteArrayRegion(jba.object<jbyteArray>(), 0,
ba.
size(),
reinterpret_cast<jbyte*
>(
ba.
data()));
247 QJniObject jmessage = QJniObject::construct<QtJniTypes::NdefMessage>(jba.object<jbyteArray>());
248 if (!jmessage.isValid()) {
255 env.findMethod<
void, QtJniTypes::NdefMessage>(
tagTech.objectClass(), writeMethod);
257 env->CallVoidMethod(
tagTech.object(), methodId, jmessage.object<jobject>());
258 if (!methodId || env.checkAndClearExceptions()) {
292 bool connected =
false;
293 auto methodId = env.findMethod<jboolean>(
tagTech.objectClass(),
"isConnected");
296 if (!methodId || env.checkAndClearExceptions()) {
304 methodId = env.findMethod<
void>(
tagTech.objectClass(),
"connect");
306 env->CallVoidMethod(
tagTech.object(), methodId);
307 if (!methodId || env.checkAndClearExceptions()) {
311 methodId = env.findMethod<
void>(
tagTech.objectClass(),
"close");
313 env->CallVoidMethod(
tagTech.object(), methodId);
314 if (!methodId || env.checkAndClearExceptions())
333 Q_ASSERT_X(
tag.isValid(),
"updateTechList",
"could not get Tag object");
335 QJniObject techListArray =
tag.callMethod<QtJniTypes::StringArray>(
"getTechList");
336 if (!techListArray.isValid()) {
343 jsize techCount = env->GetArrayLength(techListArray.object<jobjectArray>());
344 for (jsize
i = 0;
i < techCount; ++
i) {
345 QJniObject tech = env->GetObjectArrayElement(techListArray.object<jobjectArray>(),
i);
346 techList.append(tech.callMethod<jstring>(
"toString").toString());
379 QJniObject atqaBA = nfca.callMethod<jbyteArray>(
"getAtqa");
381 if (atqaQBA.isEmpty())
383 if ((atqaQBA[0] & 0x1F) == 0x00)
389 jshort sakS = nfca.callMethod<jshort>(
"getSak");
390 if ((sakS & 0x0064) == 0x0000)
392 else if ((sakS & 0x0064) == 0x0020)
425 Q_ASSERT_X(
tag.isValid(),
"getTagTechnology",
"could not get Tag object");
436 for (
const QString &tech : technologies) {
456 auto methodId = env.findMethod<jboolean>(
tagTech.objectClass(),
"isConnected");
457 bool connected =
false;
460 if (!methodId || env.checkAndClearExceptions())
467 methodId = env.findMethod<
void>(
tagTech.objectClass(),
"connect");
470 env->CallVoidMethod(
tagTech.object(), methodId);
471 return !env.checkAndClearExceptions();
480 auto methodId = env.findMethod<
void, jint>(
tagTech.objectClass(),
"setTimeout");
483 return methodId && !env.checkAndClearExceptions();
490 jsize
len = env->GetArrayLength(byteArray);
492 env->GetByteArrayRegion(byteArray, 0,
len,
reinterpret_cast<jbyte*
>(resultArray.
data()));
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
void resize(qsizetype size)
Sets the size of the byte array to size bytes.
qsizetype size() const noexcept
The QNdefMessage class provides an NFC NDEF message.
static Q_NFC_EXPORT QNdefMessage fromByteArray(const QByteArray &message)
Returns an NDEF message parsed from the contents of message.
void targetDestroyed(const QByteArray &tagId)
QJniObject getTagTechnology(const QString &tech) const
void targetLost(QNearFieldTargetPrivateImpl *target)
QNearFieldTarget::RequestId writeNdefMessages(const QList< QNdefMessage > &messages) override
bool setTagTechnology(const QStringList &technologies)
void setupTargetCheckTimer()
QNearFieldTarget::Type getTagType() const
bool setCommandTimeout(int timeout)
void setIntent(QJniObject intent)
int maxCommandLength() const override
QNearFieldTarget::RequestId readNdefMessages() override
~QNearFieldTargetPrivateImpl() override
bool disconnect() override
QNearFieldTargetPrivateImpl(QJniObject intent, const QByteArray uid, QObject *parent=nullptr)
void ndefMessageRead(const QNdefMessage &message, const QNearFieldTarget::RequestId &id)
QNearFieldTarget::Type type() const override
QNearFieldTarget::RequestId sendCommand(const QByteArray &command) override
QNearFieldTarget::Type tagType
QByteArray jbyteArrayToQByteArray(const jbyteArray &byteArray) const
QNearFieldTarget::AccessMethods accessMethods() const override
bool hasNdefMessage() override
QTimer * targetCheckTimer
QByteArray uid() const override
void error(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id)
virtual void setResponseForRequest(const QNearFieldTarget::RequestId &id, const QVariant &response, bool emitRequestCompleted=true)
void requestCompleted(const QNearFieldTarget::RequestId &id)
void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id)
\inmodule QtNfc \inheaderfile QNearFieldTarget
Type
This enum describes the type of tag the target is detected as.
void ndefMessageRead(const QNdefMessage &message)
This signal is emitted when a complete NDEF message has been read from the target.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString & replace(qsizetype i, qsizetype len, QChar after)
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
QByteArray toUtf8() const &
void start(int msec)
Starts or restarts the timer with a timeout interval of msec milliseconds.
void setInterval(int msec)
void stop()
Stops the timer.
void timeout(QPrivateSignal)
This signal is emitted when the timer times out.
QJniObject getTag(const QJniObject &intent)
AudioChannelLayoutTag tag
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
QNearFieldTarget::RequestId requestId
#define MIFARECLASSICTECHNOLOGY
#define NDEFFORMATABLETECHNOLOGY
GLbitfield GLuint64 timeout
[4]
GLuint GLsizei const GLchar * message
#define Q_ASSERT_X(cond, x, msg)
char * toString(const MyType &t)
[31]
\inmodule QtCore \reentrant
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent