Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android NFC: Exception "transceive failed" when using transceive()

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?

like image 227
P. Sherman Avatar asked Nov 10 '22 03:11

P. Sherman


1 Answers

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

like image 73
P. Sherman Avatar answered Nov 14 '22 23:11

P. Sherman