Android NFC: Exception “transceive failed” when us

2020-06-21 08:47发布

I'm trying to communicate between a Samsung Galaxy S3 and a smartcard that supports NfcA and IsoDep (Mifare DESFire EV1). To do this, I enabled forgeground dispatch and started a task when a tag is discovered. The code in the task looks like this:

IsoDep isoDep = IsoDep.get(tag);

byte[] selectCommand = {
        (byte)0x00, // CLA
        (byte)0xA4, // INS
        (byte)0x04, // P1
        (byte)0x00, // P2
        (byte)0x0A, // LC
        (byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04,(byte)0x05,(byte)0x06,(byte)0x07,(byte)0x08,(byte)0x09,(byte)0xFF, // AID
        (byte)0x7F  // LE
};

try {
    isoDep.connect();
    byte[] response = isoDep.transceive(selectCommand);
    String result = bytesToString(response);
    isoDep.close();
    return result;
} catch (Exception e) {
    e.printStackTrace();
}

The transceive method throws this exception:

java.io.IOException: Transceive failed

All other methods of IsoDep (like getTimeout()) can be executed without error. Increasing the timeout doesn't change the behaviour. The applet with the AID in the select command is present on the card. I also tried to use the NfcA class. But then I get the exception "tag is lost".

Could the Galaxy S3 be the problem?

1条回答
可以哭但决不认输i
2楼-- · 2020-06-21 09:35

I just tried the same app on another phone and it worked without any problems. The Galaxy S3 is indeed the problem.

查看更多
登录 后发表回答