我正在构建连接到nfc安全元素的android应用程序并获取数据到android设备。用于构建安全元素我使用了java卡API。在jcop工具中发送ATR命令来重置java卡。这是发送命令
/card -a a000000003000000 -c com.ibm.jc.CardManager
resetCard with timeout: 0 (ms)
--Waiting for card...
ATR=3B F8 18 00 FF 81 31 FE 45 4A 43 4F 50 76 32 34 ;.....1.EJCOPv24
31 43 1C
ATR: T=1, FI=1/DI=8 (31clk/etu), N=-1, IFSC=254, BWI=4/CWI=5, Hist="JCOPv241"
=> 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00
我正在使用jcop工具。安全元素部分已完成。但我的android应用程序需要在一秒钟内向安全元素发送更多请求。我用这个方式创建标签并发送数据。
byte[] GET_STRING = {
(byte) 0x80, // CLA Class
0x04, // INS Instruction
0x00, // P1 Parameter 1
0x00, // P2 Parameter 2
0x10 // LE maximal number of bytes expected in result
};
result = tag.transceive(GET_STRING);
int len = result.length;
if (!(result[len-2]==(byte)0x90&&result[len-1]==(byte) 0x00))
throw new RuntimeException("could not retrieve msisdn");
byte[] data = new byte[len-2];
System.arraycopy(result, 0, data, 0, len-2);
String str = new String(data).trim();
tag.close()
但我需要知道如何使用android isoDep连接发送ATR命令。如果无法在获取数据后如何重置Java卡。
由于 Sajith
答案 0 :(得分:1)
关于您的术语:
在非接触式接口上,您的卡没有产生ATR的重置序列。但是,非接触式界面上有两个类似的事件。一个是关闭HF场。这导致功率损耗并因此导致卡的硬复位。第二种是将非接触式卡置于HALT状态,并通过激活和重新激活卡。 ISO / IEC 14443-3中规定的选择程序。这通常也会导致卡重置其内部状态。
关于如何重置通过Android IsoDep
连接的非接触式卡的问题:
硬重置:只有将卡从NFC设备的读取范围中取出然后再扫描才能实现。
"软复位":在大多数设备上,这应该可以通过使用IsoDep
实例关闭并重新打开连接来实现:
IsoDep isoDepTag = IsoDep.get(tag);
[...]
isoDepTag.close();
isoDepTag.connect();
[...]
但是,您应该认为某些设备(例如Galaxy S4与某些Android版本相结合)将无法正常执行软重置(HALT +重新激活/选择),而只是继续之前的连接。