以前は ACR 122 を使用していましたが、Android 4.1 未満のスマートフォンで問題なく動作しました。私はそれを使って P2P SNEP メッセージを交換していました... しかし、電話が 4.1 になったので、電話を上に置くと、リーダーがビープ音を発して点滅し始めました。他の誰かがこの非互換性を発見しましたか? 解決策はありますか?
5 に答える
Android 4.1 Jelly Bean 以降、NFC ピアツーピア通信はより高いビットレート (212 kbps) を使用するように構成されていますが、以前は 106 kbps を使用していました (Google ウォレットがインストールされている 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
。
他の誰かがこれに取り組んでいるのを見るのは素晴らしいことです。「ダイレクト」でリーダーに接続できます。クレジットはPeterKmetに送られます:javax.smartcardioはカードなしでNFCUSBリーダーに送信します
このサンプルでは、ライトを切り替えるだけです
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で進歩が見られたら、更新してください。コードもチェックアウトします。
これは、範囲内にカードがなくても端末に接続するのに役立ちます。
terminal.connect("DIRECT");
小さな「ハック」で問題を解決しました。SAM モジュールを搭載した ACR122U を使用していますが、これが TouchATag リーダーであるバージョンがどれかわかりません。電話がNFCフィールドにない場合も、リーダーはこの行を通過する必要があることがわかりました。
cardTerminal.connect("*").getBasicChannel();
これは、電話が nfc フィールドに入る前にリーダーを初期化モードにする必要があるためです。これは、APDU を送信できる場合にのみ機能します。
を呼び出すことなく APDU を送信する解決策を誰かが見つけたconnect()
場合cardTerminal
。
この問題は高ビットレートとは関係ありません。424 kbps で通信できました。
この知識を使って作成した NFC API を googel コードで見つけることができます。また、いくつかのドキュメントも提供します。
http://code.google.com/p/java-android-beam-api/
コメント大歓迎です!
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 で Samsung デバイスをサポートするには、プロトコルにいくつかの変更が必要です (これは nfctools から取得できますが、nfctools を使用して互換性を高めることをお勧めします)。