9

我之前使用过 ACR 122,它与 Android < 4.1 的手机完美配合。我用它来交换 P2P SNEP 消息...但是由于手机是 4.1,当您将手机放在阅读器上方时,阅读器开始发出哔哔声和闪烁。有没有其他人发现这种不兼容?有什么解决办法吗?

4

5 回答 5

6

从 Android 4.1 Jelly Bean 开始,NFC 点对点通信被配置为使用更高的比特率 (212 kbps),而之前它使用的是 106 kbps(在安装了 Google Wallet 的 Android 设备中,它始终使用 212 kbps)。

不知道ACR122U能否通过javax.smartcardio. 里面的NFC芯片(NXP的PN532)当然可以做到。212 和 424 kbps 的低级 ISO18092/ECMA-340 协议不同于 106 kbps。对于 106 kbps,它使用与 ISO14443 相同的调制方式,而更高的比特率使用与 FeliCa 相同的调制方式(参见标准的第 7 页和第 8页)。所以我怀疑这无法通过javax.smartcardio.

于 2012-08-28T19:30:51.537 回答
4

很高兴看到其他人在这方面工作。您可以通过“直接”连接到阅读器。学分转到 Peter Kmet:javax.smartcardio 无卡传输到 NFC USB 读卡器

此示例将仅切换灯光

        TerminalFactory factory;
        List<CardTerminal> terminals;
        factory = TerminalFactory.getDefault();
        terminals = factory.terminals().list();
        terminal = terminals.get(0);

        byte[] response = null;
        byte[] command = new byte[] { (byte) 0xff, (byte) 0x00, (byte) 0x40, (byte) 0xd0, (byte) 0x04,
            (byte) 0x05, (byte) 0x05, (byte) 0x02, (byte) 0x01 };
        int controlCode = 0x310000 + 3500 * 4;
        Card card = null;
        card = terminal.connect("DIRECT");
        response = card.transmitControlCommand(controlCode, command);

如果您在 Jelly Bean 方面取得任何进展,请更新,我也会检查您的代码。

于 2012-11-12T12:23:31.180 回答
3

这有助于在范围内没有卡的情况下连接到终端:

terminal.connect("DIRECT");
于 2012-11-12T15:06:48.700 回答
1

我用一个小“黑客”解决了这个问题。我正在使用带有 SAM 模块的 ACR122U,不知道哪个版本有这个,它是 TouchATag 阅读器。我发现阅读器必须通过这条线,当手机不在 NFC 领域时:

cardTerminal.connect("*").getBasicChannel();

这是因为您必须在手机进入 nfc 字段之前将阅读器置于初始化模式,而这只有在您可以发送 APDU 时才有效!

如果有人找到无需调用connect().cardTerminal

这个问题与更高的比特率无关,我设法获得了 424 kbps 的通信。

您可以在 googel 代码中找到我用这些知识编写的 NFC API,我还将在那里提供一些文档:

http://code.google.com/p/java-android-beam-api/

非常欢迎评论!

于 2012-11-11T18:52:52.870 回答
0

在 Java 语言中,您可以使用:

1)nfctools:https ://github.com/grundid/nfctools 。它适用于 Android 4.0、4.1、4.2、4.3、4.4。

2) http://code.google.com/p/ismb-snep-java。它适用于 Android 4.0 和 Android 4.4(但不适用于 4.1、4.2、4.3)。为了在 4.4 中支持三星设备,需要对协议进行一些更改(可以从 nfctools 获取,但最好使用 nfctools 来增加兼容性)。

于 2014-10-23T10:25:30.570 回答