Сообщение NDEF с HCE Android
Я хочу эмулировать хост-карту с функцией HCE от Android. Для этого я расширяю класс обслуживания HostApduService и перезаписываю следующий метод:
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
if (Arrays.equals(SELECT_APDU, commandApdu)) {
NdefMessage message = new NdefMessage(new NdefRecord [] {NdefRecord.createTextRecord("en", "test"});
return message.toByteArray();
} else {
return UNKNOWN_CMD_SW;
}
}
Со вторым устройством можно получать данные из службы HCE. Проблема в том, что я всегда получаю тег "Тип A", но мне нужно сообщение NDEF.
Кто-нибудь может мне помочь?
1 ответ
Для тех, кто застрял в этой проблеме, я прочитал NFCForum-TS-Type-4-Tag, предложенный @Michael Roland. Вся идея верна. Все, что вам нужно, это смоделировать команды процесса SEND и RECEIVED для преобразования байтового массива в сообщение NDEF. Я создал два репозитория, один завершает весь пакет о преобразовании строки в сообщение NDEF, а другой - тег NDEF iOS Reader для проверки правильности Android HCE или нет.
Удачи!
Эмуляция тега, который определяется как тег NDEF с помощью Android HCE, не так проста, как отправка сообщения NDEF в ответ на запрос SELECT APDU. Вам нужно будет реализовать спецификацию работы с тегами типа 4 форума NFC. Вы можете получить эту спецификацию на веб-сайте NFC Forum.
В основном вам нужно будет зарегистрировать службу HCE для AID D2760000850101
который реализует пару команд APDU, которые сторона чтения использует для доступа к тегу типа 4:
ВЫБЕРИТЕ приложение тега NDEF
00 A4 04 00 07 D2760000850101 [00]
Контейнер SELECT
00 A4 04 0C 02 E103
ВЫБЕРИТЕ файл данных NDEF
00 A4 04 0C 02 xxyy
куда
xxyy
является идентификатором файла данных NDEF, как указано в контейнере возможностей.READ BINARY (для чтения данных из контейнера возможностей или файла данных NDEF, в зависимости от того, что выбрано в данный момент)
00 B0 xx yy zz
куда
xx yy
это смещение для чтения в иzz
количество байтов для чтения.