一些android需要手动发送RATS并在NfcA标签(ISO 14443-4A)的transceive()中添加块号.



在读取NfcA标签时,我发现一些Android模型(例如三星S8)要求我在SELECT之前明确发送RATS并发送任何I块,块号(2/3)必须明确插入命令的第一个字节,并且块号也将出现在响应的第一个字节中,即


代码段1

byte[] response = nfca.transceive(Utils.getBytes("E0 80")) ; //RATS
response = nfca.transceive(Utils.getBytes("02 00 A4 04 00 07 A0 00 00 05 50 00 11")) ; //SELECT, response =02...

在LG-LM-Q710上运行代码段1的结果在SM-G9500上运行代码段1的结果


然而,对于一些(例如LG Q Stylus+),两者都不是必需的,这是我期望的正确抽象:


代码段2

byte[] response = nfca.transceive(Utils.getBytes("00 A4 04 00 07 A0 00 00 05 50 00 11")) ; //SELECT

为什么ISO 14443-4A协议抽象方式不同?这是由于不同的NFC堆栈或NFC控制器吗?我怎么知道该用哪一个呢?

Android上的NfcA只提供对ISO 14443-3A的访问

对于ISO 14443-4A,你应该使用IsoDep类

你没有指定标签的确切品牌和型号,所以很难判断它在多大程度上符合NFC标准(有些不完全符合,有些类型的卡只能在Android上选择性地支持)