如何重新连接到 IsoDep 标签?

How can I reconnect to IsoDep tag?

我正在尝试从 android phone 向 nfc 标签发送一些 apdu 命令并获得答案。使用的技术类型是 IsoDep。一切正常,但有时,当发送命令之间的时间过长时,标签会切换到禁用状态,之后每次重新连接都会失败。

我的代码:

public byte[] transferCommand(byte[] command) throws Exception {
        byte[] result = null;
        if (iso == null)   {
            iso = IsoDep.get(tag);
            iso.connect();
        }
        if (!iso.isConnected()) {
            try {
                iso.close();
                iso.connect();
                result = iso.transceive(command);
            } catch (Exception ex) {
                iso.close();
            }
        }            
        return result;
    }

有人可以帮帮我吗?非常感谢。

connect 和相关命令只是管理与标签的逻辑连接。即:它们授予您的线程和应用程序对标记对象的独占访问权。他们不对物理标签连接做任何事情。 (至少据我所知,距离上次阅读NfcService代码已经有一段时间了)。

因此,一旦标签停止响应您的请求,连接和重新连接将无济于事。在这种情况下,您所能做的就是物理删除标签并将其再次提交给 reader。

如果您 运行 遇到超时问题,请尝试通过在标记对象上调用 setTimeout 来提高超时值。

我知道这是一个旧线程。但我碰巧遇到了同样的问题。不断地,如果连接闲置很长时间,比如大约 1 分钟,它就会关闭。即使在重新触摸标签后,phone 也无法重新连接。我必须从设置中再次禁用和启用 NFC 才能恢复连接。

据我所知,在所有这些测试中,我认为 phone 或 OS 导致 NFC 硬件进入故障状态。或者它可能处于睡眠模式以节省电量。因为发生这种情况时,不同的 phone 仍然可以连接到标签。但是你必须在原来的 phone 上切换 off/on NFC 才能重新连接。这可能是由硬件或驱动程序中的看门狗定时器引起的。

一种解决方法是ping NFC标签,例如检查标签状态,每10秒左右保持连接。但是,你正在耗尽 phone.

的力量

我也在尝试 NfcAdapter 中的 ignore 方法,看看它是否是一种更优雅的处理方式。

标记:NFC 连接断开超时