无需重新引入即可重新连接到 NFC TAG
Posted
技术标签:
【中文标题】无需重新引入即可重新连接到 NFC TAG【英文标题】:Reconnect to NFC TAG without reintroduction 【发布时间】:2021-12-01 23:52:47 【问题描述】:我一直在努力寻找是否可以在不将 NFC 标签移开然后移回的情况下触发tag_discovered
。我的发现表明,在某些设备上,只需使用以下命令 nfcA.close()
关闭 NfcA 连接即可。似乎不同的制造商以不同的方式实现这一点(?)。
还有其他方法可以破坏设备和 TAG 之间的 NFC 场吗?
我也试过禁用 NfcAdapter 和 NfcManager。这似乎也适用于某些设备但不是全部:
// Disable
nfcAdapter.disableForegroundDispatch(this)
nfcManager.defaultAdapter.disableReaderMode(this)
// Enable
val option = Bundle()
option.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 2000)
nfcAdapter.enableReaderMode(this, nfcManager, NfcAdapter.FLAG_READER_NFC_A, option)
我们将不胜感激。
【问题讨论】:
重新连接的原因是什么?如果您没有关闭连接,则无需重新连接。 我正在执行一个需要我重新检测 TAG 的命令。 不知道为什么执行多个命令会强制您重新连接,我已经向卡发出了 100 条命令而没有重新连接。 如果您指定了您正在使用的标签类型以及强制您重新连接的命令的细节,这可能会有所帮助,因为我怀疑这不是标准命令或完全兼容的标签。 我不明白为什么这与原始问题有关?问题很简单,是否有可能以某种方式破坏 NFC 标签和设备之间的 NFC 场,而无需重新引入物理场。这是一个 NfcA TAG,我只能这么说。 【参考方案1】:谢谢安德鲁。
我的猜测是,您实际上不需要关闭该字段,只需将标签设为 ISO14443-3 HALT 状态,然后将其恢复为 ACTIVE 状态,但这是未知的。再次发送 HLTA 和 WUPA 的低级别 ISO14443-3 命令来执行此操作在 android 上是有问题的,因为它不是为用户发送这些命令而设计的。
仔细研究 ISO14443-3 标准和 HALT 命令,我终于找到了解决方案。运行下面的命令会导致TagLostException
反过来使onTagDiscovered
方法运行。因此,通过使用 HALT,我无需物理重新引入即可重新发现 TAG。
byte[] HaltCMD = 0x35, 0x30, 0x30,0x30, 0x00;
【讨论】:
以上是关于无需重新引入即可重新连接到 NFC TAG的主要内容,如果未能解决你的问题,请参考以下文章