Итак, сейчас я создаю простое приложение для эмуляции смарт-карты с использованием Android HCE (эмуляция карт на основе хоста). Приложение возвращает массив байтов только {90,00} для каждой полученной команды APDU. Вот код:
public class MyHostApduService extends HostApduService {
@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
byte[] response = new byte[2];
response[0] = (byte)0x90;
response[1] = 0x00;
return response;
}
//Rest of the code...
}
И затем я попытался подключить свой смартфон (я использую Sony Xperia M2) к устройству чтения смарт-карт (ACR122U-A9), используя метод CardTerminal.connect() из javax.smartcardio.CardTerminal, как это
Card card = terminal.connect("*");
Он работал для настоящей смарт-карты, но не хочет подключать мой телефон. Есть звуковой сигнал, но светодиод выключился (он не стал зеленым, как при обнаружении настоящей смарт-карты), и когда я вынимаю смартфон, я получил CardException, и светодиод снова стал красным. Иногда кажется, что считыватель подключен к телефону (светодиод стал зеленым), но телефон не получает APDU. Я также пытался подключиться с помощью scScriptor.exe из Springcard с тем же результатом.
Я что-то пропустил в коде? Или, возможно, техническая проблема?
РЕДАКТИРОВАТЬ: я установил файл apk на galaxy s iii моего друга, и он работает, поэтому я подозреваю, что это проблема телефона.