【问题标题】:How to detect NFC tag was removed如何检测 NFC 标签被移除
【发布时间】:2016-07-07 16:50:46
【问题描述】:

我是 NFC 技术的新手。我正在尝试读写 Mifare Classic 4K 标签。我成功地阅读和写作。我可以检测到onNewIntent action 上的标签。

我的问题是我无法检测到何时移除了 NFC 标签(类似于检测标签时的onNewIntent)。

我该如何解决这个问题?

【问题讨论】:

  • 赶上IO_EXCEPTION
  • 我想在它被删除时立即通知我。而不是在读写过程中
  • 捕获 IO 显示 Dailog 错误。这有什么问题?
  • 我的意思是我应该在除读写之外的哪个操作中捕获I/O异常。

标签: android tags nfc mifare detach


【解决方案1】:

如果标签从阅读器中移除,则不会有任何事件通知您的应用。检测移除的典型方法是主动轮询标签(例如,通过读取 NDEF 消息或数据块),直到收到指示与标签的通信丢失的 IOException。


更新

从 Android API 级别 24 开始,这不再适用。现在有一个方法

NfcAdapter.ignore(tag, debounceMs, tagRemovedListener, handler);

可用于注册回调以在标签删除时获取通知。不过这种方法可能存在一些问题,因此请仔细阅读documentation 的副作用/极端情况。

【讨论】:

  • android本身的nfc系统服务不支持吗?还是只是android没有为此提供API?
  • @Yashasvi NFC 堆栈当然知道标签何时从现场消失并进行一些内部清理,但没有通知应用层的机制。
  • @Michael Roland 能否提供有关我们如何使用 NFCAdapter.ignore 的示例?
【解决方案2】:

您可以致电查询 isoDep.isConnected(); 在 IsoDep 中

【讨论】:

  • 我想知道您将如何为 MIFARE 4K 标签做到这一点。它们不公开 IsoDep 接口。另请注意,调用 isConnected 并不像人们预期的那样可靠。
  • 我使用的是读卡器模式,不是android intent触发的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多