NFC读卡器ACR 122与Android 4.1 Jelly Beans不兼容?

时间:2012-07-27 08:08:45

标签: android nfc nfc-p2p

之前我使用过ACR 122,它与Android< 4.1电话。我用它来交换P2P SNEP消息......但是由于手机有4.1,当你把手机放在它上面时,读卡器会开始发出哔哔声并闪烁。有没有其他人发现这种不兼容性?任何解决方案?

5 个答案:

答案 0 :(得分:6)

自从Android 4.1 Jelly Bean以来,NFC点对点通信被配置为使用更高的比特率(212 kbps),而早期使用的是106 kbps(在安装了Google Wallet的Android设备中,它总是使用212 kbps )。

我不知道ACR122U是否可以通过javax.smartcardio支持更高的比特率。内部的NFC芯片(恩智浦的PN532)当然可以做到。 212和424 kbps的低级ISO18092 / ECMA-340协议与106 kbps不同。对于106 kbps,它使用与ISO14443相同的调制,而较高比特率使用与FeliCa相同的调制(参见第7 and 8 of the standard页)。所以我怀疑这不能通过javax.smartcardio处理。

答案 1 :(得分:4)

很高兴看到其他人正在为此工作。您可以通过" Direct"连接到阅读器。学分归Peter Kmet所有:javax.smartcardio transmit to NFC USB reader without card

此示例只会切换灯光

        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取得任何进展,请更新,我也会检查您的代码。

答案 2 :(得分:3)

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

terminal.connect("DIRECT");

答案 3 :(得分:1)

我用一个小小的&#34; hack&#34;解决了这个问题。我正在使用带有SAM模块的ACR122U,不知道哪个版本有它的TouchATag阅读器。我发现,当手机不在NFC领域时,读者必须通过这一行:

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

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

如果有人在connect()上未调用cardTerminal而找到了发送APDU的解决方案。

此问题与较高比特率无关,我设法以424 kbps进行通信。

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

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

非常欢迎评论!

答案 4 :(得分: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来提高兼容性。)