无需重新引入即可重新连接到 NFC TAG
Reconnect to NFC TAG without reintroduction
我现在一直在努力寻找是否有可能在不将 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)
如有任何帮助,我们将不胜感激。
谢谢安德鲁。
My guess is that you don't actually need to turn the field off but just need to get the Tag to the ISO14443-3 HALT state and then bring it back to ACTIVE state, but that is unknown. Again sending the low level ISO14443-3 commands of HLTA and WUPA to do this is problematic on Android as it is not designed for the user to send these commands.
仔细研究 ISO14443-3 标准和 HALT 命令,我终于找到了解决方案。 运行 下面的命令会导致 TagLostException
进而使 onTagDiscovered
方法成为 运行。因此,通过使用 HALT,我可以重新发现 TAG,而无需物理重新引入。
byte[] HaltCMD = {0x35, 0x30, 0x30,0x30, 0x00};
我现在一直在努力寻找是否有可能在不将 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)
如有任何帮助,我们将不胜感激。
谢谢安德鲁。
My guess is that you don't actually need to turn the field off but just need to get the Tag to the ISO14443-3 HALT state and then bring it back to ACTIVE state, but that is unknown. Again sending the low level ISO14443-3 commands of HLTA and WUPA to do this is problematic on Android as it is not designed for the user to send these commands.
仔细研究 ISO14443-3 标准和 HALT 命令,我终于找到了解决方案。 运行 下面的命令会导致 TagLostException
进而使 onTagDiscovered
方法成为 运行。因此,通过使用 HALT,我可以重新发现 TAG,而无需物理重新引入。
byte[] HaltCMD = {0x35, 0x30, 0x30,0x30, 0x00};