我正在开发一个应用程序,我必须从ITSO智能卡读取信息。它支持以下三种技术,用于过滤ACTION_TECH_DISCOVERED。
android.nfc.tech.IsoDep, android.nfc.tech.NfcA
android.nfc.tech.NdefFormatable
现在当我使用下面的代码
byte[] apduCmd = {
0x00, //CLA
(byte)0xA4, //INS select
0x00, //P1
0x00, //P2
0x02 //LE
};
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
IsoDep isoDep = IsoDep.get(tag);
try {
isoDep.connect();
byte[] result = isoDep.transceive(apduCmd);
Log.i(TAG, "SELECT: " + bytesToHex(result));
if (!(result[0] == (byte) 0x90 && result[1] == (byte) 0x00)) {
Toast.makeText(this, "Exception occurred!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Read successfully!", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
}
上面的代码给出了成功字节,即9000 现在我不知道下一步该做什么?如何从此ITSO卡读取完整的数据/信息。 (这张卡是公交车票的类型)。 有什么建议吗?
感谢迈克尔,我已阅读文档ITSO specification,并想知道创建命令以从卡中读取数据。 我按以下顺序执行命令。
1) SELECT DIRECTORY- 906A000000
2) SELECT APPLICATION- 905A0000031602A000
3) READ DATA- 90BD0000070400000000000000 (File number- 4)
4) ADDITIONAL FRAME- 90AF000000 (This will execute only if we have Additional frame in response.)
我得到的回复如下所示(如果文件编号为4,则低于响应)
Response: 230A00009469FA0798004600002698400100000000000000000000000000000000042C00C0001CDC131089EB4A583BC000000000000000000000000000000000
现在我不确定如何从中获取信息? 我可以用XML或JSON一次获取所有信息吗?有没有更简单的方法可以做到这一点?
2016年10月5日更新 我在HEX String中获取了shell信息,你能帮我解码一下它的文本信息。 (参考上面给出的ITSO规范。