Я искал в спецификации глобальной платформы, как определить APDU для моего приложения, которое будет использовать эмуляцию хост-карты (HCE). Предполагается, что в моем приложении один телефон ведет себя как тег NFC через HCE, а другой - в качестве считывателя NFC. Произвольные данные, которые я пытаюсь передать между телефонами, представляют собой простую строку, содержащую идентификационный номер, но я не совсем уверен, как применить его в коде. Я посмотрел, что означают различные байтовые команды, но я действительно не уверен, как их применять.
Я думаю, что мне нужно использовать команду STORE DATA, но я не уверен, как это сделать интуитивно, и не совсем понимаю. Сейчас я смотрю на HCE, а не на читателя.
Это мой код для HCE
public class SecondaryActivity extends HostApduService {
@Override
public void onDeactivated(int reason) {
}
@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
String inboundApduDescription;
byte[] responseApdu;
if (Arrays.equals(AID_SELECT_APDU, commandApdu)) {
inboundApduDescription = "Application selected";
Log.i("HCEDEMO", inboundApduDescription);
byte[] answer = new byte[2];
answer[0] = (byte) 0x90;
answer[1] = (byte) 0x00;
responseApdu = answer;
return responseApdu;
}
return commandApdu;
}
private static final byte[] AID_SELECT_APDU = {
(byte) 0x00,
(byte) 0xA4,
(byte) 0x04,
(byte) 0x00,
(byte) 0x07,
(byte) 0xF0, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00,
(byte) 0x00
};
private static final byte[] STORE_DATA = {
(byte) 0x00,
(byte) 0xA4,
(byte) 0x04,
(byte) 0xA5, // forproprietary data according to the spec
(byte) 0xE2,
(byte) 0x66, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00,
(byte) 0x00
};
private static final byte[] INSTALL = {
(byte) 0x00,
(byte) 0x00,
};
}
Как отправить данные с телефона HCE на телефон считывателя?
Чего мне не хватает?
Что нужно сделать?