Android NFC: Exception “transceive failed” when using transceive()

北城以北 提交于 2020-01-22 15:38:04

问题


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 just tried the same app on another phone and it worked without any problems. The Galaxy S3 is indeed the problem.



来源:https://stackoverflow.com/questions/33149704/android-nfc-exception-transceive-failed-when-using-transceive

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!