Я работаю над приложением для Android, читающим бесконтактную смарт-карту, но у меня есть некоторые проблемы с моей Galaxy S3. Прежде чем описывать проблемы, мне нужно уточнить, что на ПК я могу прекрасно общаться с картой, используя API смарт-карт в Java и NFC-устройствах от разных производителей.Transceive не удалось на Galaxy S3 с картой NFC-B
Эта карта обнаружена в качестве поддерживающих технологий «IsoDep» и «NfcB» стекю NFC. Однако, когда я отправляю свою команду apdu с «transceive», я получаю исключение «Transceive failed». Я пытался увеличить тайм-аут, но не лучший результат.
iso = IsoDep.get(tag);
if (iso!=null) {
try {
iso.connect();
// txMessage is a TextView object used for debugging purpose
txMessage.setText("Max:"+iso.getMaxTransceiveLength()+" timeout:"+iso.getTimeout()+" connected:"+iso.isConnected());
iso.setTimeout(2000);
txMessage.setText("Max:"+iso.getMaxTransceiveLength()+" timeout:"+iso.getTimeout()+" connected:"+iso.isConnected());
byte[] command = new byte[] {(byte) 0x00, (byte) 0xA4, (byte) 0x04,(byte) 0x00, (byte) 0x06,(byte) 0xA0,(byte) 0x00,(byte) 0x00, (byte) 0x00,(byte) 0x12,(byte) 0x00};
byte[] response = iso.transceive(command);
} catch (IOException e) {
txMessage.setText(txMessage.getText()+"\n"+e.getMessage());
}
}
При выполнении этого кода, я получаю:
Max:261 timeout:309 connected: true
Max:261 timeout:2474 connected: true
Transceive failed
Я заметил, что эта карта требует, чтобы быть очень близко от антенны NFC работать. Мне нужно снять дополнительный пластиковый защитный чехол (а не заднюю панель) моего телефона, чтобы карта была обнаружена (я думаю, что она была задействована).
Прежде чем отправлять, я прочитал NFC typeb card not getting detected by any NFC application (like:nfctaginfo) и Android isodep.isConnected() returns false and maximum Transceive length:0 byte ,for type B card.? и несколько других должностей в другом месте (http://forum.xda-developers.com/showthread.php?t=1705970, http://code.google.com/p/android/issues/detail?id=35960), но я не нашел решение.
Возможное решение - попытаться установить связь с внешней антенной, но я не уверен, где ее подключить? На разъеме аккумулятора, где нет «+» и «-»?
Другим решением является попытка установить связь с картой с помощью NfcB (NfcB nfcb = NfcB.get(tag);
), но я не знаю протокол ISO14443-3B (я достаточно хорошо знаю APDU, T0-TPDU, но не другие протоколы TPDU).
Чтобы быть уверенным, я обновил свой телефон до Android 4.1.2 (вместо 4.1.1), но не лучший результат.
У меня точно такие же результаты с Samsung Nexus S I9020 от Samsung под Android 4.1.2 – moimoiici
Нет лучшего результата с внешней антенной на Galaxy Nexus S ... :-( – moimoiici